if-else ·
case ·
for ·
while ·
until
Mit diesen Konstrukten steuern Sie den Ablauf Ihrer Skripte – von einfachen Bedingungen bis zu komplexen Schleifen und Fallunterscheidungen.
if-else führt Code basierend auf Bedingungen aus. Mit elif können Sie mehrere Bedingungen prüfen.
| Operator | Beschreibung |
|---|---|
| [[ $a == $b ]] | Zeichenketten gleich |
| [[ $a != $b ]] | Zeichenketten ungleich |
| [[ $a -eq $b ]] | Zahlen gleich (equal) |
| [[ $a -ne $b ]] | Zahlen ungleich (not equal) |
| [[ $a -gt $b ]] | Zahlen größer als (greater than) |
| [[ $a -lt $b ]] | Zahlen kleiner als (less than) |
| [[ $a -ge $b ]] | Zahlen größer oder gleich |
| [[ $a -le $b ]] | Zahlen kleiner oder gleich |
| [[ -z $var ]] | Variable ist leer (zero length) |
| [[ -n $var ]] | Variable ist nicht leer |
| [[ -f datei ]] | Datei existiert |
| [[ -d ordner ]] | Verzeichnis existiert |
[[ ]] (doppelte Klammern) für modernere und sicherere Bedingungen. [[ $a == $b ]] funktioniert auch mit leeren Variablen ohne Fehler.
case ist eine Alternative zu mehreren if-elif-Bedingungen. Ideal für Menüs oder Befehlsauswertung mit Platzhaltern.
| Platzhalter | Beschreibung |
|---|---|
| * | Alles (Standard-Fallback) |
| ? | Ein beliebiges Zeichen |
| [abc] | Eines der Zeichen a, b oder c |
| start|stop|restart | Mehrere Muster mit | (ODER) |
case ist besonders übersichtlich für Menüs und Optionen. Die Muster werden von oben nach unten geprüft – der erste Treffer wird ausgeführt.
for iteriert über eine Liste von Werten – Zahlenbereiche, Dateien, Zeichenketten oder die Ausgabe eines Befehls.
| Varianten | Beschreibung |
|---|---|
| for i in {1..10} | Zahlenbereich 1 bis 10 |
| for i in {1..10..2} | Zahlenbereich mit Schrittweite 2 (1,3,5,7,9) |
| for file in *.txt | Alle .txt-Dateien im aktuellen Verzeichnis |
| for user in $(cat users.txt) | Ausgabe eines Befehls iterieren |
| for ((i=0; i<10; i++)) | C-artige for-Schleife (mit Zähler) |
for-Schleife ist besonders nützlich für numerische Iterationen mit komplexen Zählbedingungen.
while führt den Codeblock aus, solange die angegebene Bedingung wahr (Erfolgscode 0) ist. Ideal für zählergesteuerte Schleifen oder Datei-Eingabe.
| Anwendung | Beschreibung |
|---|---|
| while read -r line | Zeilen aus einer Datei oder Pipe lesen |
| while true | Endlosschleife (mit break beenden) |
| while [ $i -le 10 ] | Zählergesteuerte Schleife |
| while getopts | Optionen parsen (komplexere Skripte) |
while read -r line; do ... done < file ist die Standardmethode, um Textdateien zeilenweise zu verarbeiten – auch mit großen Dateien effizient.
until ist das Gegenteil von while: Der Code wird ausgeführt, solange die Bedingung falsch ist, und stoppt, sobald sie wahr wird.
| Anwendung | Beschreibung |
|---|---|
| until [ $i -gt 10 ] | Führt aus, bis $i größer als 10 ist |
| until ping -c1 host | Wartet, bis ein Host erreichbar ist |
| until -f datei | Wartet, bis eine Datei existiert |
until ist perfekt für Warteschleifen, bei denen auf ein Ereignis gewartet wird (Datei, Netzwerk, Prozess).
if-else
case
for
while
until