Bedingte Anweisungen in Bash: if, elif, else
December 7, 2015
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.