Für die Formulierung von Bedingungen, wie sie für die Kontrollstrukturen benötigt werden, wird bei der bash ein integriertes (buildin) Kommando verwendet, das test-Kommando. Mit diesem können unterschiedliche Bedingungen definiert werden, wobei sowohl zeichenbasierte und nummerische Bedingungen als auch Bedingungen auf Dateien und Verzeichnisse möglich sind. Weiterhin können mehrere Bedingungen miteinander verknüpft werden.
Das test
-Kommando liefert bei einer wahren Bedingung eine exit
-Wert von 0
, ansonsten einen von 0
unterschiedlichen Wert. Sollten keine Argumente an test
übergeben werden, so liefert test
immer einen Wert unterschiedlich von 0
(falsch). Für den Aufruf gibt es zwei Möglichkeiten:
test
oder
[ ausdruck ]
Wichtig ist bei der zweiten Form, dass nach der öffnenden eckigen Klamme [
und vor der schließenden eckigen Klamme ]
mindestens ein Leer- oder Tabulatorzeichen angegeben wird. Sollen Zeichenketten mit Leerzeichen verglichen werden, müssen diese in Hochkommata gestellt werden, damit der komplette String verglichen wird. Gerade bei Variablen kann dies eine häufige Fehlerquelle sein.
Bedingungen für Zeichenketten und Zahlen
Bedingungen für Zeichenketten
Ausdruck | liefert wahr, wenn… |
---|---|
zk | die Zeichenkette nicht leer ist |
-z zk | die Zeichenkette leer ist [0 Zeichen] (zero) |
-n zk | die Zeichenkette nicht leer ist (not zero) |
zk1 = zk2 | die Zeichenketten identisch sind |
zk1 != zk2 | die Zeichenketten voneinander abweichen |
Bedingungen für Zahlen
Ausdruck | liefert wahr, wenn… |
---|---|
z1 -eq z2 | die Zahlen gleich sind (equal) |
z1 -ne z2 | die Zahlen ungleich sind (not equal) |
z1 -gt z2 | z1 größer z2 ist (greater than) |
z1 -ge z2 | z1 größer gleich z2 ist (greater equal) |
z1 -lt z2 | z1 kleiner z2 ist (less than) |
z1 -le z2 | z1 kleiner gleich z2 ist (less equal) |
Bedingungen auf Dateien
Weiterhin können mittels test
Bedingungen auf Dateien formuliert werden, wobei die Argumente der Bedingung als Pfad zu einer Datei interpretiert werden:
Ausdruck | liefert wahr, wenn |
---|---|
-b dat | dat existiert und eine blockspezif. Gerätedatei ist (block) |
-c dat | dat existiert und eine zeichenspezif. Gerätedatei ist (character) |
-d dat | dat existiert und es sich um ein Verzeichnis handelt (directory) |
-e dat | die Datei existiert (exist) |
-f dat | dat existiert und es sich um eine einfache Datei handelt (file) |
-L dat | dat existiert und es sich um einen symbolische Link handelt (link) |
-r dat | dat existiert und die Datei gelesen werden darf (read) |
-s dat | dat existiert und die Datei mindestens 1 Byte lang ist (size) |
-w dat | dat existiert und die Datei verändert werden darf (write) |
-x dat | dat existiert und die Datei ausgeführt werden darf (execute) |
-O dat | dat existiert und der dat-Eigentümer der effektiven UID entspricht (owner) |
-G dat | dat existiert und die dat-Gruppe der effektiven GID entspricht (group) |
-S dat | dat existiert und eine spezielle Datei vom socket-Typ ist (socket) |
-p dat | dat existiert und eine named pipe ist (pipe) |
dat1 -ef dat2 | beide Dateien denselben I-Node haben (equal file) |
dat1 -nt dat2 | dat1 neuer als dat2 ist (newer than) |
dat1 -ot dat2 | dat1 älter als dat2 ist (older than) |
Verknüpfung von Bedingungen
Für die Verknüpfung von Bedingungen stehen noch die folgenden Operatoren zur Verfügung:
Ausdruck | Bedeutung |
---|---|
!ausdruck | negiert den Wahrheitswert des nachfolgenden Ausdrucks |
ausdr1 -a ausdr2 | verknüpft die Wahrheitswerte der beiden Ausdrücke mit dem UND-Operator (and) |
ausdr1 -o ausdr2 | verknüpft die Wahrheitswerte der beiden Ausdrücke mit dem ODER-Operator (or) |
( ausdr ) | Klammerung eines Ausdruckes, um andere als die voreingestellten Prioritäten für die Operatoren bei der Auswertung eines Ausdrucks festzulegen |