• Beitrags-Autor:
  • Beitrag zuletzt geändert am:03.05.2020
  • Beitrags-Kategorie:Informatik

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

Ausdruckliefert wahr, wenn
zkdie Zeichenkette nicht leer ist
-z zkdie Zeichenkette leer ist [0 Zeichen] (zero)
-n zkdie Zeichenkette nicht leer ist (not zero)
zk1 = zk2die Zeichenketten identisch sind
zk1 != zk2die Zeichenketten voneinander abweichen
Bedingungen für Zeichenketten
Ausdruckliefert wahr, wenn
z1 -eq z2die Zahlen gleich sind (equal)
z1 -ne z2die Zahlen ungleich sind (not equal)
z1 -gt z2z1 größer z2 ist (greater than)
z1 -ge z2z1 größer gleich z2 ist (greater equal)
z1 -lt z2z1 kleiner z2 ist (less than)
z1 -le z2z1 kleiner gleich z2 ist (less equal)
numerische Bedingungen

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:

Ausdruckliefert wahr, wenn
-b datdat existiert und eine blockspezif. Gerätedatei ist (block)
-c datdat existiert und eine zeichenspezif. Gerätedatei ist (character)
-d datdat existiert und es sich um ein Verzeichnis handelt (directory)
-e datdie Datei existiert (exist)
-f datdat existiert und es sich um eine einfache Datei handelt (file)
-L datdat existiert und es sich um einen symbolische Link handelt (Link)
-r datdat existiert und die Datei gelesen werden darf (read)
-s datdat existiert und die Datei mindestens 1 Byte lang ist (size)
-w datdat existiert und die Datei verändert werden darf (write)
-x datdat existiert und die Datei ausgeführt werden darf (execute)
-O datdat existiert und der dat-Eigentümer der effektiven UID entspricht (Owner)
-G datdat existiert und die dat-Gruppe der effektiven GID entspricht (Group)
-S datdat existiert und eine spezielle Datei vom socket-Typ ist (Socket)
-p datdat existiert und eine named pipe ist (pipe)
dat1 -ef dat2beide Dateien denselben I-Node haben (equal file)
dat1 -nt dat2dat1 neuer als dat2 ist (newer than)
dat1 -ot dat2dat1 ä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:

AusdruckBedeutung
!ausdrucknegiert den Wahrheitswert des nachfolgenden Ausdrucks
ausdr1 -a ausdr2verknüpft die Wahrheitswerte der beiden Ausdrücke mit dem UND-Operator (and)
ausdr1 -o ausdr2verknüpft die Wahrheitswerte der beiden Ausdrücke mit dem ODER-Operator (or)
( ausdr )Klammerung eines Ausdruckes, um andere als die voreingestellten Prioritätenfür die Operatoren bei der Auswertung eines Ausdrucks festzulegen