Bedingungen (if, test)
Bash-Scripting
Entscheidungen im Skript
Mit Bedingungen reagiert dein Skript auf Situationen: Existiert die Datei? Ist die Zahl größer als 10? Je nach Ergebnis wird ein anderer Codeblock ausgeführt. Das Schlüsselwort dafür ist if.
if / elif / else
#!/bin/bash
zahl=7
if [ "$zahl" -gt 10 ]; then
echo "größer als 10"
elif [ "$zahl" -eq 7 ]; then
echo "genau 7"
else
echo "etwas anderes"
fi
Achte auf die Struktur: then, am Ende fi (umgekehrtes if). Die Leerzeichen innerhalb der eckigen Klammern sind Pflicht: [ "$zahl" -gt 10 ] – ohne Leerzeichen gibt es einen Fehler.
Der Exit-Status $?
Jeder Befehl liefert beim Beenden einen Exit-Status: 0 bedeutet Erfolg, alles andere einen Fehler. Du liest ihn mit $?:
$ ls /existiert/nicht $ echo $? 2
if prüft genau diesen Status – deshalb kannst du direkt einen Befehl als Bedingung verwenden:
if grep -q "fehler" log.txt; then
echo "Fehler gefunden!"
fi
test, [ ] und [[ ]]
[ ] ist eigentlich das Programm test. Bash bietet zusätzlich [[ ]], das mehr kann und sicherer ist:
| Merkmal | [ ] | [[ ]] |
|---|---|---|
| Standard | POSIX (überall) | nur Bash/ksh |
| && / || | nicht direkt | möglich |
| Muster-/Regex | nein | ja (=~) |
| leere Variablen | fehleranfällig | robuster |
Für Bash-Skripte ist [[ ]] meist die bessere Wahl.
Wichtige Testoperatoren
# Zahlen: -eq -ne -lt -le -gt -ge [ "$a" -eq "$b" ] # gleich # Strings: = != -z (leer) -n (nicht leer) [ "$s" = "ja" ] # Dateien: -f (Datei) -d (Verzeichnis) -e (existiert) -r/-w/-x if [ -f "config.txt" ]; then echo "Datei da"; fi if [ -d "/etc" ]; then echo "Verzeichnis da"; fi
Welcher Exit-Status bedeutet Erfolg?
Stolperfallen & Sicherheit
Setze Variablen in Tests immer in Anführungszeichen ("$var"). Sonst führt eine leere Variable bei [ ] zu Syntaxfehlern oder unerwartetem Verhalten – ein klassischer Bug. Prüfe in Skripten kritische Schritte mit dem Exit-Status, bevor du fortfährst (z. B. ob ein Verzeichnis existiert, bevor du darin löschst). Mehr zum sauberen Umgang mit Werten unter Variablen & Quoting.