While
Version vom 25. November 2025, 15:37 Uhr von Thomas.will (Diskussion | Beiträge) (→Netzwerk-Wartebedingung)
while-Schleifen
- Die while-Schleife in der Bash führt Befehle so lange aus, wie eine bestimmte Bedingung erfüllt ist.
- Sie ist ideal, wenn die Anzahl der Wiederholungen im Voraus nicht bekannt ist – z. B. beim Einlesen von Daten oder bei Wartebedingungen.
Grundprinzip
- Vor jedem Durchlauf wird die Bedingung geprüft.
- Solange der Rückgabewert (Exit-Status) der Bedingung 0 ist, wird der Schleifenrumpf ausgeführt.
- Ergibt die Bedingung einen anderen Wert, wird die Schleife beendet.
Syntax
while [ Bedingung ]
do
Befehle
done
Beispiel – Zählerschleife
- Ein einfaches Beispiel mit einer Zählvariablen.
ZAHL=1
while [ $ZAHL -le 5 ]
do
echo "Zahl: $ZAHL"
ZAHL=$((ZAHL+1))
done
Ausgabe: Zahl: 1 Zahl: 2 Zahl: 3 Zahl: 4 Zahl: 5
Beispiel – Wartebedingung
- Solange eine Datei nicht existiert, wartet die Schleife.
while [ ! -f /tmp/start.flag ]
do
echo "Warte auf Startdatei..."
sleep 2
done
echo "Datei gefunden, starte Vorgang."
Beispiel – Datei zeilenweise einlesen
- Die while-Schleife eignet sich sehr gut, um Dateien zeilenweise zu lesen.
while read ZEILE
do
echo "Zeile: $ZEILE"
done < /etc/passwd
Ausgabe (gekürzt): Zeile: root:x:0:0:root:/root:/bin/bash Zeile: daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin Zeile: bin:x:2:2:bin:/bin:/usr/sbin/nologin
- Das Umleitungszeichen < sorgt dafür, dass die Datei als Eingabequelle (STDIN) verwendet wird.
- Jede Zeile wird nacheinander in die Variable ZEILE gelesen.
Beispiel – Mit Exit-Status prüfen
- Die Bedingung in der while-Schleife basiert auf dem Rückgabewert eines Befehls (0 = wahr, ≠0 = falsch).
- Dies kann auch mit echo $? überprüft werden.
ping -c1 10.0.0.1 > /dev/null 2>&1
echo $?
0
while ping -c1 10.0.0.1 > /dev/null 2>&1
do
echo "Host erreichbar"
sleep 5
done
Hinweise
- Die Schleife wird beendet, sobald die Bedingung falsch ist (Exit-Code ≠ 0).
- Eine Endlosschleife kann mit while true; do … done erstellt werden.
- Mit break kann die Schleife vorzeitig verlassen werden.
- Mit continue wird der aktuelle Durchlauf übersprungen.
- Der aktuelle Exit-Status kann jederzeit mit echo $? angezeigt werden.
Aufgaben zu while-Schleifen
Zähler mit Bedingung aus externer Quelle
- Erstellen Sie eine while-Schleife, die so lange zählt, wie der Inhalt der Datei /tmp/limit eine Zahl größer als 0 enthält. Verringern Sie in jedem Durchlauf den Wert in der Datei um 1.
Prozessüberwachung
- Schreiben Sie eine Schleife, die alle 2 Sekunden prüft, ob der Prozess sshd läuft. Wenn er startet, soll die Schleife sofort abbrechen und „Prozess gefunden“ ausgeben.
Lesen mit Filter
- Lesen Sie /etc/passwd zeilenweise ein, aber geben Sie nur Zeilen aus, die das Wort /bin/bash enthalten.
Zeitbegrenzte Schleife
- Erstellen Sie eine Schleife, die maximal 10 Durchläufe macht. In jedem Durchlauf prüfen Sie, ob /tmp/ready existiert. Wenn die Datei gefunden wird, brechen Sie sofort ab. Wenn sie nach 10 Durchläufen nicht gefunden wird, geben Sie „Timeout“ aus.
Schleife mit break und continue
- Erstellen Sie eine while-Schleife, die eine Liste von Ports (z. B. 22 80 443 8080) nacheinander prüft. Ports unter 100 sollen übersprungen werden (continue). Sobald Port 443 erreicht ist, soll die Schleife beendet werden (break).
Echtzeit-Einlesung
- Erstellen Sie eine Schleife, die Eingaben des Benutzers (read) entgegennimmt und jede Eingabe sofort wieder ausgibt. Wenn der Benutzer „stop“ eingibt, soll die Schleife enden.
Schleife gesteuert über Exit-Status
- Führen Sie ein Kommando in der Schleife aus (z. B. curl -Is https://example.com). Die Schleife soll so lange laufen, wie der Exit-Status ungleich 0 ist. Bei Erfolg soll „Erreichbar“ ausgegeben werden.