# Testen von Bedingungen

Die Formulierung von Bedingungen ist in der Bash nicht durch einfache Ausdrücke zu realisieren, da zum einen viele Sonderzeichen (<,>) bereits reserviert sind und zum anderen alle Aktionen über ein einheitliches Kommandokonzept durchgeführt werden sollen. Deswegen exisitiert für solche Zwecke das build-in Kommando `test`.

`test` liefert `0`, falls die Bedingung erfüllt ist, und eine `1` sonst. Die Schreibweise in eckigen Klammern ist eine Ersatzdarstellung.

`user@sonne> test "$i" user@sonne> [ "$i" ]`

gibt 0 zurück, wenn die Variable `i` belegt ist, andernfalls eine `1`.

`user@sonne> test -e $i`

testet, ob eine Datei mit dem Namen in `i` existiert.

Für Dateien existieren folgende Tests:

Option | Bedeutung
-b/-c | Test auf Gerätedatei (Block/Character)
-d | Test auf Verzeichnis
-e | Existenz der Datei
-f | Test auf normale Datei
-p | Test auf Pipe
-r/-w/-x | Test auf Lese-/Schreib-/Ausführungsrecht
-s | Test, ob Datei nicht leer ist

Mehrere Tests können kombiniert werden:

Option | Bedeutung
! | Negation.
-a | Logisches UND zweier Tests
-o | Logisches ODER zweier Tests

Um sich mit dem Kommando vertraut zu machen, kann man dieses gleich auf der Shell ausprobieren:

`user@sonne> var=5 user@sonne> test $var -gt 5; echo $? 1 user@sonne> test -f /dev/console; echo $? 1 user@sonne> test -c /dev/console; echo $? 0 user@sonne> test -e /bin/passwd -a -x /bin/passwd; echo $? 0 user@sonne> test -b /dev/null -o -c /dev/null user@sonne> test $? -eq 0 && echo "Geraetedatei" Geraetedatei`