Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi1:skripte

Kleine Beispiele

Hello World

#!/bin/bash
echo hello world!

1)

Beispiel mit if/else

#!/bin/bash
if test -n "$1"
then
  echo hello $1
else
  echo hello world!
fi

Source

srctest
#!/bin/sh
 
foo=bar
cd /tmp
echo "foo=$foo"
pwd
ps f
pstree -spu
bash ./srctest
chmod +x ./srctest
./srctest
source ./srctest
. ./srctest

Rückgabewerte

#!/bin/bash
ping -c 1 -w 1 "$1"
result=$?
if test "$result" -eq 0
then
  echo $1 antwortet
elif test "$result" -eq 1
then
  echo $1 antwortet nicht
elif test "$result" -eq 2
then
  echo $1 nicht gefunden
else
  echo weiss auch nicht
fi

Beispiel mit && und ||

#!/bin/bash
 
test -r test.conf && . test.conf
 
test -z "$name" || hello $name

Beispiel mit case

#!/bin/bash
case "$1" in
  start)
    echo $0 wird gestartet
  ;;
  stop)
    echo $0 wird gestopt
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  *)
    echo was soll ich tun
    exit 1
esac

Beispiel mit for

#!/bin/bash
 
for ip in 10 11 12 13 14
do
  ping -q -c 1 -W 1 192.168.1.$ip >/dev/null && echo 192.168.1.$ip
done

Beispiel mit for, seq und Kommandosubstitution

( und einer kleinen Subshell )

#!/bin/bash
 
for ip in $(seq 1 254)
do
  ( ping -q -c 1 -W 1 192.168.1.$ip >/dev/null && echo 192.168.1.$ip ) &
done

Beispiel mit while

#!/bin/bash
 
arp -n -a | while read name ip auf mac rest
do
  echo $ip -\> $mac
done

Beispiel mit while, case und getopt

#!/bin/bash
 
von=1
bis=10
subnetz=
 
while getopts 'v:b:s:' opt
do
  case "$opt" in
    v) von=$OPTARG
    ;;
    b) bis=$OPTARG
    ;;
    s) subnetz=$OPTARG
    ;;
  esac
done
 
echo -- -v: $von, -b: $bis, -s: $subnetz

Beispiel mit grep, regulärem Ausdruck, id und xargs

(Alle Benutzer und Gruppenzugehörigkeit herausfiltern)

#!/bin/bash
 
grep -o '^[^:]*' /etc/passwd | xargs -L1 id

Etwas größeres Beispiel

Suche Mac-Addressen mit mehreren IP-Adressen im Subnetz

#!/bin/bash
 
# Default Werte
von_ip=1
bis_ip=254
 
# Subnetz, von ip und bis ip aus Konfigdatei lesen
test -r mac_search.conf && . mac_search.conf
 
# Kommandozeilenargumente auswerten
while getopts 'v:b:s:' opt
do
  case "$opt" in
    v) von_ip=$OPTARG
    ;;
    b) bis_ip=$OPTARG
    ;;
    s) subnetz=$OPTARG
    ;;
  esac
done
 
# Mac-Adressen für alle aktiven IP-Adressen von $1 bis $2 ausgeben
function get_mac {
  for ip in $(seq $1 $2)
  do
    # mac-Adresse von erfolgreich gepingten IP-Adressen ausgeben
    ( ping -q -c 1 -W 1 $3.$ip >/dev/null && arp -a $3.$ip ) &
  done
 
  while test "$(jobs -r|wc -l)" -ne 0
  do
    sleep 1
  done
}
 
# Doppelte Mac-Adressen ausfiltern
function print_double {
  while read name ip auf mac rest
  do
    echo $mac
  done | sort | uniq -d
}
 
get_mac $von_ip $bis_ip $subnetz | print_double

Links zum Shell-Programmieren

1)
Was passiert wohl, wenn man folgendes Skript aufruft:
#!/bin/rm
echo hello world!
lpi1/skripte.txt · Zuletzt geändert: 2015/09/02 09:54 von stefan_miethke