UNIX-SHELL-Programmierung
Programmkonstrukte

if - Verzweigung
Der if-Befehl kann in Abhängigkeit einer Bedingung zu verschiedenen Aktionen verzweigen. Ist die Bedigung erfüllt (0/TRUE), so werden die Kommandos des then-Zweiges ausgeführt. Andernfalls (nicht-0/FALSE) treten die Aktionen des else-Zweiges in Kraft. Der else-Zweig kann auch entfallen, die Verarbeitung wird stets nach dem fi fortgeführt. Wichtig ist, dass die BEDINGUNG in eckigen Klammern steht und die einzelnen Komponenten darin mit Blanks getrennt werden.

Syntax:

Beispiel:

if BEDINGUNG
then
KOMMANDOS
[ else KOMMANDOS ]
fi

if [ $LOGNAME = "PCZ" ]
then
echo "Hallo Herr PCZ !!"
else
echo " Sie kenne ich gar nicht ..."
fi

Bedingungen
Es ist zu empfehlen, dass sämtliche Bedingungen immer mit der Funktion test formuliert werden. Mit der Funktion test können Sie den Dateistatus feststellen, numerische Tests und Zeichenkettentests durchführen. Anstelle von test können aber ebenso eckige Klammern [ ] um die Abfrage herum geschrieben werden.

Dateistatus-Tests:

Syntax

Beispiel

Beschreibung

if test -e datei

if test -e c:/winnt/winfile.ini

True, wenn die Datei existiert

if test -r datei

if test -r c:/winnt/winfile.ini

True, wenn die Datei lesbar ist

if test -w datei

if test -w c:/winnt/winfile.ini

True, wenn die Datei beschreibbar ist

if test -x datei

if test -x c:/winnt/winfile.ini

True, wenn die Datei ausführbar ist

if test -d datei

if test -d c:/winnt/winfile.ini

True, wenn die Datei ein Verzeichnis (Directory) ist

if test -s datei

if test -s c:/winnt/winfile.ini

True, wenn die Datei nicht leer ist

Numerische-Tests:

Syntax

Beispiel

Beschreibung

if test x1 -eq x2

if test zahl_1 -eq zahl_2

True, wenn x1 gleich x2 ist

if test x1 -ne x2

if test zahl_1 -ne zahl_2

True, wenn x1 ungleich x2 ist

if test x1 -gt x2

if test zahl_1 -gt zahl_2

True, wenn x1 größer als x2 ist

if test x1 -lt x2

if test zahl_1 -lt zahl_2

True, wenn x1 kleiner als x2 ist

if test x1 -ge x2

if test zahl_1 -ge zahl_2

True, wenn x1 größer gleich x2 ist

if test x1 -le x2

if test zahl_1 -le zahl_2

True, wenn x1 kleiner gleich x2 ist

 

Zeichenketten-Tests:

Syntax

Beispiel

Beschreibung

if test x1

if test $LOGNAME

True, wenn x1 nicht leer ist

if test -z x1

if test -z $LOGNAME

True, wenn x1 die Länge 0 hat

if test -n x1

if test -n $LOGNAME

True, wenn x1 nicht die Länge 0 hat

if test x1 = x2

if test $LOGNAME = "PCZ"

True, wenn x1 gleich x2 ist

if test x1 != x2

if test $LOGNAME != "PCZ"

True, wenn x1ungleich x2 ist

Darüberhinaus lassen sich die Tests

verneinen

!

UND-verknüpfen

-a

ODER-verknüpfen

-o

Klammern

( )

Case-Verzweigung:

Syntax:

Beispiel:

case VARIABLE in
liste1)
KOMMANDOS;;
liste2)
KOMMANDOS;;
.....
esac

ESSEN=erbse
case $ESSEN in
apfel|pfirsich|banane|kirsche)
echo "$ESSEN ist eine Frucht";;
rettich|kohl|erbse|moehre)
echo "$ESSEN ist Gemuese";;
schwein|fisch|rind|hase)
echo "$ESSEN ist ein Tier";;
*)
echo "Dieses $ESSEN kenne ich nicht";;
esac

For-Schleife:

Syntax:

Beispiel:

for VARIABLE in Wort1 Wort2 ..... Wortn
do
KOMMANDOS
done

for FRUCHT in apfel kirsche banane
do

echo $FRUCHT
done

While-Schleife:

Syntax:

Beispiel:

while BEDINGUNG

do

KOMMANDOS

done

echo "Gib ein Wort ein:"
read a
while
test $a != "stop"
do
echo $a
echo "Gib noch ein Wort ein:"
read a
done

 

Until-Schleife:

Syntax:

Beispiel:

until BEDINGUNG

do

KOMMANDOS

done

echo "Gib ein Wort ein:"
read a
until
test $a = "stop"
do
echo $a
echo "Gib noch ein Wort ein:"
read a
done

While-Schleifen und Until-Schleifen können zusätzlich mit dem Befehl break beendet werden oder mit dem Befehl continue an den Schleifenanfang springen. Ist die Bedingung nicht mehr erfüllt oder wurde mittels break abgebrochen, so geht es nach done weiter.