Home · Kontakt · Impressum
contents index previous up next
Next: 15.3.3 if ... then Up: 15.3 Grundstrukturen Previous: 15.3.1 Auswerten

Unterabschnitte



15.3.2 test

Ein wichtiges Element der Programmierung ist die Möglichkeit sich je nach den gegebenen Fakten unterschiedlich verhalten zu können. Dazu müssen Entscheidungen gefällt werden, die auf wahren oder falschen Aussagen beruhen. Ein Instrument für die Ermittlung von wahren und falschen Aussagen ist der Befehl test.

test AUSDRUCK
[ AUSDRUCK ]

Der angegebene Ausdruck wird ausgewertet und ein entsprechender Fehlercode 0 für wahr und 1 für falsch wird ausgegeben. Der untere Befehl ist eine Kurzform von test. Die öffnende eckige Klammer entspricht dem Befehl test. Die schließende eckige Klammer terminiert den Ausdruck. Daher müssen vor und hinter der eckigen Klammer Leerzeichen stehen.

15.3.2.1 Ausdrücke

Der Befehl gibt für die folgenden Ausdrücke wahr zurück, wenn die folgenden Aussagen zutreffen.

AUSDRUCK : Der Ausdruck ist wahr.

! AUSDRUCK : Der Ausdruck ist falsch.

AUSDRUCK1 -o AUSDRUCK2 : Einer der beiden Ausdrücke oder beide sind wahr.

AUSDRUCK1 -a AUSDRUCK2 : Beide Ausdrücke sind wahr.

-n STRING : Die Zeichenkette umfaßt mindestens ein Zeichen.

-z STRING : Die Zeichenkette enthält keine Zeichen.

STRING1 = STRING2 : Beide Zeichenketten sind gleich.

STRING1 != STRING2 : Die Zeichenketten sind unterschiedlich.

INTEGER1 -eq INTEGER2 : Die beiden Ganzzahlen sind gleich.

INTEGER1 -ne INTEGER2 : Die beiden Ganzzahlen sind nicht gleich.

INTEGER1 -gt INTEGER2 : Die erste Zahl ist größer als die Zweite.

INTEGER1 -lt INTEGER2 : Die erste Zahl ist kleiner als die Zweite.

INTEGER1 -ge INTEGER2 : Die erste Zahl ist größer oder gleich der Zweiten.

INTEGER1 -le INTEGER2 : Die erste Zahl ist kleiner oder gleich der Zweiten.

-e DATEI : Die Datei existiert.

-s DATEI : Die Datei existiert und ist größer als 0 Byte.

-d DATEI : Die Datei existiert und ist ein Verzeichnis.

-f DATEI : Die Datei existiert und ist eine normale Datei.

-b DATEI : Die Datei existiert und ist ein Block-Gerät.

-c DATEI : Die Datei existiert und ist ein Zeichen-Gerät.

-L DATEI : Die Datei existiert und ist ein symbolischer Link.

-p DATEI : Die Datei existiert und ist eine Pipeline-Datei (FIFO).

-S DATEI : Die Datei existiert und ist ein Socket.

-r DATEI : Die Datei existiert und ist lesbar.

-w DATEI : Die Datei existiert und ist schreibbar.

-x DATEI : Die Datei existiert und ist ausführbar.

-u DATEI : Die Datei existiert und SUID ist gesetzt.

-g DATEI : Die Datei existiert und SGID ist gesetzt.

-k DATEI : Die Datei existiert und Sticky Bit ist gesetzt.

-O DATEI : Die Datei existiert und sein Besitzer ist gleich der effektiven UID.

-G DATEI : Die Datei existiert und seine Gruppe ist gleich der effektiven GID.

DATE1 -ef DATEI2 : Beide Dateien besitzen die gleiche Geräte- oder Inode-Nummer.

DATE1 -ot DATEI2 : Die Datei 1 ist älter als die Datei 2.

DATE1 -nt DATEI2 : Die Datei 1 ist jünger als die Datei 2.

Mit den Shell-Logik-Operatoren && und || können damit einfache Entscheidungen aufgebaut werden. Gerade bei der Ausführung von Skripten wird oft getestet, ob die Skripte überhaupt existieren.

Dieses Beispiel finden Sie in der ~/.bashrc. Die Datei ~/.alias, in der die Alias-Einträge eingetragen werden, wird nur ausgeführt, wenn Sie existiert und nicht leer ist.

test -s ~/.alias && . ~/.alias

15.3.2.2 Beispiel

Ein Verzeichnis mit vier Dateien dient als Übungsgebiet.
ole@enterprise:~/test> ls -l
insgesamt 8
-rw-r--r--    1 ole      users          96 Nov 26 22:14 hebong
-rw-r--r--    1 ole      users           0 Nov 26 22:14 leer
drwxr-xr-x    2 ole      users          35 Nov 26 22:13 ordner
-rwxr-xr-x    1 ole      users          96 Nov 25 22:40 shebang

Handelt es sich um Verzeichnisse oder nicht. Der Fehlercode verrät es.

ole@enterprise:~/test> test -d ordner; echo $?
0
ole@enterprise:~/test> test -d hebong; echo $?
1

Der Fehlercode kann auch direkt ausgewertet werden. Die beiden Operatoren && und || machen die Ausführung des zweiten Befehls vom Testergebnis abhängig.

ole@enterprise:~/test> test -e leer && echo "Die Datei existiert."
Die Datei existiert.
ole@enterprise:~/test> test -s leer && echo "Die Datei ist nicht leer."
ole@enterprise:~/test> test shebang -ot hebong && echo "Älter"
Älter

Das ganze geht auch mit Zahlen.

ole@enterprise:~/test> [ 42 -gt 12 ] && echo "Richtig"
Richtig
ole@enterprise:~/test> [ 42 -lt 12 ] || echo "Falsch"
Falsch

Bei der Kurzschreibweise sollten Sie auf keinen Fall die Leerzeichen vergessen.

ole@enterprise:~/test> [ -x shebang] && echo "Ausführbar"
[: missing `]'

Der Unterschied zwischen && und || ist deutlich sichtbar.

ole@enterprise:~/test> [ -x shebang ] && echo "Ausführbar"
Ausführbar
ole@enterprise:~/test> [ -x hebong ] && echo "Ausführbar"
ole@enterprise:~/test> [ -x hebong ] || echo "Nicht Ausführbar"
Nicht Ausführbar


contents index previous up next
Next: 15.3.3 if ... then Up: 15.3 Grundstrukturen Previous: 15.3.1 Auswerten
  © 2004 by IT-Dozent Ole Vanhoefer · Zum Seitenanfang