if-Verzweigung
Mit dem if-Befehl kann man unterschiedlich komplexe Verzweigungen realisieren.
Der Verzweigungsblock wird mit dem internen Schlüsselkommando if eingeleitet und mit dem Schlüsselwort fi wieder abgeschlossen.
Alle Anweisungen dazwischen gehören dem Verzweigungsblock an. Verzweigungen können beliebig oft ineinander geschachtelt werden.
Der if-Befehl erwartet ein einzelnes Kommando oder eine Kommandoliste, die durch die bash ausgeführt wird.
Je nachdem, welchen exit-status das Kommando liefert, wird die Verzweigung im true- oder false-Zweig abgearbeitet.
Der true-Zweig, wird jeweils mit then eingeleitet und durch das zugehörige elsif, else oder fi der Verzweigung wieder abgeschlossen.
Mit elsif kann eine Mehrfachentscheidung definiert werden.
Diese erwartet, ebenso wie if ein Kommando, dessen exit-status darüber entscheidet, ob der nach then folgende Anweisungsblock ausgeführt wird oder nicht.
Mit else kann eine Alternative definiert werden, die ausgeführt wird, wenn alle vorhergehenden Entscheidungen der Verzweigung ein false ergeben haben.
Als erstes, zwei einfache Beispiele zum Einsatz des if-Befehls:
Das erste Script testet, ob der eingegebene Benutzername root ist und gibt eine entsprechende Meldung aus.
Das Kommando [ führt einen Stringvergleich durch und gibt einen entsprechenden exit-status zurück.
Es ist dabei zu beachten, dass es sich bei den eckigen Klammern um Kommandonamen !!!! handelt, sie müssen deshalb von Trennzeichen (Leerzeichen, Tabulatoren, Semikola) umgeben sein.
Die Einrückungen in den Scripten dienen nur der Lesbarkeit des Scriptes und werden durch die bash ignoriert.
#!/bin/bash
read -p "Bitte geben Sie Ihren Benutzernamen ein:" NAME
if [ "$NAME" = "root" ]
then
echo "Hallo root!"
echo "Nur root ist gut."
fi
if [ "$NAME" != "root" ]
then
echo "Hallo ${NAME}!"
echo "Ich rede nur mit root."
fi |
Die gleiche Funktionsweise, nur etwas übersichtlicher erreicht man durch die Verwendung der Alternativverzweigung #!/bin/bash
DEV=${1:-eth0}
if [ "$UID" = "0" ]; then
if ifconfig $DEV > /dev/null 2>&1 ; then
echo "Im System ist eine Netzwerkschnittstelle $DEV verfuegbar!"
if IP=$( ifconfig $DEV | egrep "inet addr:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ); then
IP=${IP%% Bcast*}
IP=${IP##*inet addr:}
echo "Die Schnittstelle $DEV hat die IP-Adresse $IP"
else
echo "Die Schnittstelle $DEV hat keine IP-Adresse!"
fi
else
echo "Im System ist keine Netzwerkschnittstelle $DEV verfügbar!"
fi
else
echo "Dieses Script darf nur root ausfuehren!"
fi |
In diesem Script wurden nun drei bash-2.05b$ ./test
Im System ist eine Netzwerkschnittstelle eth0 verfuegbar!
bash-2.05b$ |
Mit Parameter eth1bash-2.05b$ ./test eth1
Im System ist keine Netzwerkschnittstelle eth1 verfuegbar!
bash-2.05b$ |
Mit Parameter wlan0bash-2.05b$ ./test wlan0
Im System ist eine Netzwerkschnittstelle wlan0 verfuegbar!
Die Schnittstelle wlan0 hat die IP-Adresse 192.168.1.208
bash-2.05b$ |
Sollte das Script auch die Ausführung durch einen Benutzer zulassen, so erfolgt folgende Reaktion:
bash-2.05b$ ./test eth1
Dieses Script darf nur root ausfuehren!
bash-2.05b$ |
Zum Abschluss nun noch ein Script mit einer Mehrfachauswahl.
Das Script erwartet als Parameter eine Zahl von 1..9 als Platzierung, wobei für die Plätze 1..3 die Worte Gold, Silber oder Bronze ausgegeben werden.
Ist der Parameter keine gültige Platzierung, so wird eine Fehlermeldung erzeugt.
#!/bin/bash
if echo $1 | egrep "^[1-9]{1}$" > /dev/null 2>&1; then
if [ $1 -eq 1 ]; then
echo "Gold"
elif [ $1 -eq 2 ]; then
echo "Silber"
elif [ $1 -eq 3 ]; then
echo "Bronze"
else
echo "Platz $1"
fi
else
echo "Sie haben keine gueltige Platzierung angegeben!"
fi |