Bedingte Anweisungen in Bash: if, elif, else
Bedingte Anweisungen sind ein fundamentaler Bestandteil jeder Programmiersprache. In Bash ermöglichen sie es, Code nur dann auszuführen, wenn bestimmte Bedingungen erfüllt sind. Die grundlegende Struktur hierfür ist der if-Block.
1. Grundlegende if-else-Struktur
Ein if-Block wird mit if eingeleitet und mit fi (umgekehrtes if) beendet.
#!/usr/bin/env bash
read -r -p "Geben Sie eine Zahl ein: " number
if [ "$number" -gt 10 ]; then
echo "Die Zahl ist größer als 10."
else
echo "Die Zahl ist 10 oder kleiner."
fi
Wichtig: Die Leerzeichen um die eckigen Klammern [ und ] sind syntaktisch erforderlich. [ ist tatsächlich ein Alias für den test-Befehl.
2. Verschachtelung mit elif
elif (else if) ermöglicht die Prüfung mehrerer, aufeinanderfolgender Bedingungen.
#!/usr/bin/env bash
read -r -p "Geben Sie einen Domainnamen ein: " domain
if [ "$domain" = "google.com" ]; then
echo "Suche bei Google..."
elif [ "$domain" = "github.com" ]; then
echo "Öffne GitHub..."
else
echo "Pinge die Domain: $domain"
ping -c 3 "$domain"
fi
3. [ vs. [[ ... ]] (Test vs. erweiterter Test)
Bash bietet zwei Arten von Test-Konstrukten:
[ ... ](odertest): Dies ist der ursprüngliche, POSIX-konforme Befehl. Er ist auf allen Bourne-kompatiblen Shells verfügbar.[[ ... ]]: Dies ist eine erweiterte Bash-spezifische Syntax, die robuster und benutzerfreundlicher ist. Sie wird für Bash-Skripte empfohlen.
Vorteile von [[ ... ]]:
- Kein Word Splitting oder Globbing: Variablen müssen nicht immer in Anführungszeichen gesetzt werden (obwohl es weiterhin eine gute Praxis ist).
- Reguläre Ausdrücke: Unterstützt den
=~-Operator für den Abgleich mit regulären Ausdrücken. - Klarere logische Operatoren: Verwendet
&&und||anstelle von-aund-o.
Beispiel:
# Mit [[ ... ]]
name="John Doe"
if [[ $name == "John"* ]]; then
echo "Der Name beginnt mit John."
fi
4. Wichtige Vergleichsoperatoren
String-Vergleiche (innerhalb von [[ ... ]])
| Operator | Beschreibung |
|---|---|
== | Gleich |
!= | Ungleich |
-z str | Leer (zero length) |
-n str | Nicht leer |
< | Kleiner als (alphabetisch) |
> | Größer als (alphabetisch) |
Numerische Vergleiche
| Operator | Beschreibung |
|---|---|
-eq | Gleich (equal) |
-ne | Ungleich (not equal) |
-gt | Größer als (greater than) |
-ge | Größer oder gleich (greater or equal) |
-lt | Kleiner als (less than) |
-le | Kleiner oder gleich (less or equal) |
Datei-Operatoren
Siehe separaten Guide zu File Test Operatoren.
5. Kurzschreibweise mit && und ||
Die logischen Operatoren && (UND) und || (ODER) können verwendet werden, um Befehle basierend auf dem Erfolg (Exit-Code 0) des vorherigen Befehls auszuführen.
# Führe 'echo "Existiert"' nur aus, wenn die Datei existiert.
[ -f "config.txt" ] && echo "Datei 'config.txt' existiert."
# Führe 'echo "Fehlt"' nur aus, wenn der erste Befehl fehlschlägt.
[ -f "config.txt" ] || echo "Datei 'config.txt' fehlt."
Diese Schreibweise ist nützlich für einfache, einzeilige Bedingungen.
Fazit
Bedingte Anweisungen sind das Rückgrat der Logik in Bash-Skripten. Für neue Skripte, die ausschließlich für Bash geschrieben werden, ist die Verwendung der erweiterten [[ ... ]]-Syntax aufgrund ihrer Robustheit und besseren Lesbarkeit zu bevorzugen.