Next: for-Kommando Up: Ablaufsteuerung Previous: if-Kommando
test-Kommando
Mit dem Kommando test kann der Exit-Status in Abhängigkeit vom Wahrheitswert eines Ausdruckes gezielt gesetzt werden.
Beispiel:
$ test -f sort.c # Exit-Status gleich 0, falls File sort.c existiertAlternative Syntax:
$ [ -f sort.c ] # Exit-Status gleich 0, falls File sort.c existiertDas Kommando test erlaubt neben der Untersuchung von Files und Filetypen außerdem numerische Tests und Zeichenkettenvergleiche:
-
numerische Vergleiche
-
allgemeine Form:
[ N operator M ]
Wobei N und M für numerische Werte stehen, möglicherweise durch Shell-Variablen repräsentiert und operator für eine der folgenden Möglichkeiten steht:-eq Gleichheit von N und M -ne Ungleichheit von N und M -gt N ist größer als M -lt N ist kleiner als M -ge N ist größer oder gleich M -le N ist kleiner oder gleich M -
Beispiele:
#!/bin/sh # # Pruefen, ob mehr als <anzahl> Nutzer zum # Zeitpunkt des Aufrufs angemeldet sind # # Aufruf: $0 <anzahl> # nutzer=`who | wc -l` if [ $# -eq 0 ] then echo "Aufruf: $0 anzahl" elif [ $nutzer -gt $1 ] then echo "Mehr als $1 Nutzer angemeldet" fi
# # Varianten der Wertezuweisung an Variable # nummer=1 number=0001 numero=' 1'
Bei einem numerischen Test auf Gleichheit zwischen diesen Variablenwerten wird immer der Exit-Status 0 (d.h. Gleichheit) geliefert.
-
allgemeine Form:
-
Zeichenkettenvergleiche
-
allgemeine Formen
[ zk1 = zk2 ] Test auf Gleichheit
[ zk1 != zk2 ] Test auf Ungleichheit
Beispiele:[ $nummer = $number ] # Exit-Status ungleich 0! [ $nummer = $numero ] # Exit-Status gleich 0 (!!) da durch # test fuehrende Leerzeichen verloren gehen aber: [ "$nummer" = "$numero" ] # Exit-Status ungleich 0
-
allgemeine Formen
-
Existenz einer Zeichenkette
-
allgemeine Formen:
[ -z zeichenkette ] Test auf Länge 0 (leere Zeichenkette)
[ -n zeichenkette ] Test auf Länge ungleich 0, d.h. Existenz -
Beispiel:
#!/bin/sh # # Aufruf: $0 <filename}> # if [ -z "$1" ] then echo "Aufruf: $0 filename" else ... fi
-
Bemerkung:
if [ -z $1 ]
führt bei fehlendem Argument zu Fehlernachricht:cmd_name: argument expected
-
allgemeine Formen:
-
Untersuchung von Files
-
allgemeine Form:
[ operator filename ]
wobei operator steht für:-s File existiert und ist nicht leer -f File ist normales File, kein Verzeichnis -d File ist ein Verzeichnis -w für das File besteht Schreiberlaubnis -r für das File besteht Leseerlaubnis -x File ist ausführbar -
Beispiel:
#!/bin/sh # # Loeschen eines Files bzw. # eines leeren Verzeichnisses # # Aufruf remove <filename> # if [ -d $1 ] then rmdir $1 elif [ -f $1 ] then rm $1 fi
-
Bemerkung:
Die erläuterten Ausdrücke können darüber hinaus folgendermaßen zu komplexen Ausdrücken kombiniert werden:
[ !ausdruck ] Negation von ausdruck
[ ausdruck1 -a ausdruck2 ] logisches ,,UND``
[ ausdruck1 -o ausdruck2 ] logisches ,,ODER``
-
allgemeine Form:
Next: for-Kommando Up: Ablaufsteuerung Previous: if-Kommando