Until: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „= until-Schleifen = *Die until-Schleife ist das Gegenstück zur while-Schleife.* *Sie führt ihre Befehle so lange aus, bis eine bestimmte Bedingung erfüllt…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 11: | Zeile 11: | ||
== Syntax == | == Syntax == | ||
<syntaxhighlight lang="bash"> | |||
until [ Bedingung ] | |||
do | |||
Befehle | |||
done | |||
</syntaxhighlight> | |||
== Beispiel – Zählerschleife == | == Beispiel – Zählerschleife == | ||
*Einfaches Beispiel, das solange läuft, bis die Variable 5 erreicht.* | *Einfaches Beispiel, das solange läuft, bis die Variable 5 erreicht.* | ||
<syntaxhighlight lang="bash"> | |||
ZAHL=1 | |||
until [ $ZAHL -gt 5 ] | |||
do | |||
echo "Zahl: $ZAHL" | |||
ZAHL=$((ZAHL+1)) | |||
done | |||
</syntaxhighlight> | |||
Ausgabe: | Ausgabe: | ||
| Zeile 35: | Zeile 41: | ||
*Hier wird gewartet, bis eine bestimmte Datei existiert.* | *Hier wird gewartet, bis eine bestimmte Datei existiert.* | ||
<syntaxhighlight lang="bash"> | |||
until [ -f /tmp/ready.flag ] | |||
do | |||
echo "Warte auf Datei /tmp/ready.flag..." | |||
sleep 2 | |||
done | |||
echo "Datei gefunden, weiter geht’s." | |||
</syntaxhighlight> | |||
== Beispiel – Mit Exit-Status prüfen == | == Beispiel – Mit Exit-Status prüfen == | ||
| Zeile 45: | Zeile 54: | ||
*Sie läuft, solange der Exit-Code ≠ 0 ist.* | *Sie läuft, solange der Exit-Code ≠ 0 ist.* | ||
<syntaxhighlight lang="bash"> | |||
ping -c1 10.0.0.1 > /dev/null 2>&1 | |||
echo $? | |||
0 | |||
until ping -c1 10.0.0.1 > /dev/null 2>&1 | |||
do | |||
echo "Host noch nicht erreichbar..." | |||
sleep 5 | |||
done | |||
echo "Host antwortet!" | |||
</syntaxhighlight> | |||
== Beispiel – Datei zeilenweise prüfen == | == Beispiel – Datei zeilenweise prüfen == | ||
| Zeile 59: | Zeile 71: | ||
*Das folgende Beispiel wartet, bis eine Datei nicht mehr leer ist.* | *Das folgende Beispiel wartet, bis eine Datei nicht mehr leer ist.* | ||
<syntaxhighlight lang="bash"> | |||
until [ -s /tmp/log.txt ] | |||
do | |||
echo "Datei /tmp/log.txt ist leer – warte..." | |||
sleep 3 | |||
done | |||
echo "Datei enthält nun Daten." | |||
</syntaxhighlight> | |||
== Hinweise == | == Hinweise == | ||
* while-Schleife → läuft solange Bedingung WAHR ist (Exit-Code = 0) | * while-Schleife → läuft solange Bedingung WAHR ist (Exit-Code = 0) | ||
* until-Schleife → läuft solange Bedingung FALSCH ist (Exit-Code ≠ 0) | * until-Schleife → läuft solange Bedingung FALSCH ist (Exit-Code ≠ 0) | ||
* Beide Schleifenarten verwenden die gleiche Syntaxstruktur. | * Beide Schleifenarten verwenden die gleiche Syntaxstruktur. | ||
* Mit | * Mit '''break''' kann eine Schleife jederzeit beendet werden. | ||
* Mit | * Mit '''continue''' kann der aktuelle Durchlauf übersprungen werden. | ||
* Der aktuelle Rückgabewert kann mit '''echo $?''' angezeigt werden. | |||
== Aufgaben == | == Aufgaben == | ||
* Erstellen Sie eine until-Schleife, die von 1 bis 5 zählt und bei 5 endet. | * Erstellen Sie eine until-Schleife, die von 1 bis 5 zählt und bei 5 endet. | ||
* Schreiben Sie ein Skript, das wartet, bis eine Datei | * Schreiben Sie ein Skript, das wartet, bis eine Datei '''/tmp/trigger''' existiert. | ||
* Erstellen Sie ein Skript, das mit until wartet, bis ein Host erreichbar ist (ping). | * Erstellen Sie ein Skript, das mit '''until''' wartet, bis ein Host erreichbar ist ('''ping'''). | ||
* Fügen Sie nach jedem Schleifendurchlauf eine Ausgabe des Rückgabewerts | * Fügen Sie nach jedem Schleifendurchlauf eine Ausgabe des Rückgabewerts mit '''echo $?''' hinzu. | ||
Version vom 17. Oktober 2025, 15:31 Uhr
until-Schleifen
- Die until-Schleife ist das Gegenstück zur while-Schleife.*
- Sie führt ihre Befehle so lange aus, bis eine bestimmte Bedingung erfüllt ist.*
- Während die while-Schleife läuft, solange die Bedingung WAHR ist (Exit-Status = 0), läuft die until-Schleife, solange die Bedingung FALSCH ist (Exit-Status ≠ 0).*
Grundprinzip
- Bei jeder Iteration wird die Bedingung geprüft.*
- Solange der Rückgabewert (Exit-Status) ungleich 0 ist, wird der Schleifenrumpf ausgeführt.*
- Erst wenn der Exit-Status 0 zurückgibt, endet die Schleife.*
Syntax
until [ Bedingung ]
do
Befehle
done
Beispiel – Zählerschleife
- Einfaches Beispiel, das solange läuft, bis die Variable 5 erreicht.*
ZAHL=1
until [ $ZAHL -gt 5 ]
do
echo "Zahl: $ZAHL"
ZAHL=$((ZAHL+1))
done
Ausgabe: Zahl: 1 Zahl: 2 Zahl: 3 Zahl: 4 Zahl: 5
Beispiel – Wartebedingung
- Die until-Schleife kann auch verwendet werden, um zu warten, bis eine Bedingung erfüllt ist.*
- Hier wird gewartet, bis eine bestimmte Datei existiert.*
until [ -f /tmp/ready.flag ]
do
echo "Warte auf Datei /tmp/ready.flag..."
sleep 2
done
echo "Datei gefunden, weiter geht’s."
Beispiel – Mit Exit-Status prüfen
- Wie bei der while-Schleife basiert auch die until-Schleife auf dem Rückgabewert von Befehlen.*
- Sie läuft, solange der Exit-Code ≠ 0 ist.*
ping -c1 10.0.0.1 > /dev/null 2>&1
echo $?
0
until ping -c1 10.0.0.1 > /dev/null 2>&1
do
echo "Host noch nicht erreichbar..."
sleep 5
done
echo "Host antwortet!"
Beispiel – Datei zeilenweise prüfen
- Die until-Schleife kann ebenfalls mit Eingabedateien kombiniert werden.*
- Das folgende Beispiel wartet, bis eine Datei nicht mehr leer ist.*
until [ -s /tmp/log.txt ]
do
echo "Datei /tmp/log.txt ist leer – warte..."
sleep 3
done
echo "Datei enthält nun Daten."
Hinweise
- while-Schleife → läuft solange Bedingung WAHR ist (Exit-Code = 0)
- until-Schleife → läuft solange Bedingung FALSCH ist (Exit-Code ≠ 0)
- Beide Schleifenarten verwenden die gleiche Syntaxstruktur.
- Mit break kann eine Schleife jederzeit beendet werden.
- Mit continue kann der aktuelle Durchlauf übersprungen werden.
- Der aktuelle Rückgabewert kann mit echo $? angezeigt werden.
Aufgaben
- Erstellen Sie eine until-Schleife, die von 1 bis 5 zählt und bei 5 endet.
- Schreiben Sie ein Skript, das wartet, bis eine Datei /tmp/trigger existiert.
- Erstellen Sie ein Skript, das mit until wartet, bis ein Host erreichbar ist (ping).
- Fügen Sie nach jedem Schleifendurchlauf eine Ausgabe des Rückgabewerts mit echo $? hinzu.