While: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | = while-Schleifen = | + | == while-Schleifen == |
*Die while-Schleife in der Bash führt Befehle so lange aus, wie eine bestimmte Bedingung erfüllt ist. | *Die while-Schleife in der Bash führt Befehle so lange aus, wie eine bestimmte Bedingung erfüllt ist. | ||
| Zeile 89: | Zeile 89: | ||
* Der aktuelle Exit-Status kann jederzeit mit '''echo $?''' angezeigt werden. | * Der aktuelle Exit-Status kann jederzeit mit '''echo $?''' angezeigt werden. | ||
| − | == | + | = Aufgaben zu while-Schleifen = |
| − | * Erstellen Sie eine while-Schleife, die | + | |
| − | * Schreiben Sie | + | == Zähler mit Bedingung aus externer Quelle == |
| − | * Erstellen Sie eine | + | *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. | ||
| + | |||
| + | == 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. | ||
Aktuelle Version vom 25. November 2025, 15:38 Uhr
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.
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.