Until: Unterschied zwischen den Versionen

Aus Xinux Wiki
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…“)
 
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
 
= until-Schleifen =
 
= until-Schleifen =
  
*Die until-Schleife ist das Gegenstück zur while-Schleife.*
+
*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.*
+
*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).*
+
*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 ==
 
== Grundprinzip ==
*Bei jeder Iteration wird die Bedingung geprüft.*
+
*Bei jeder Iteration wird die Bedingung geprüft.
*Solange der Rückgabewert (Exit-Status) ungleich 0 ist, wird der Schleifenrumpf ausgeführt.*
+
*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.*
+
*Erst wenn der Exit-Status 0 zurückgibt, endet die Schleife.
  
 
== Syntax ==
 
== Syntax ==
until [ Bedingung ]; do
+
<syntaxhighlight lang="bash">
  Befehle
+
until [ Bedingung ]
done
+
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.
  
ZAHL=1
+
<syntaxhighlight lang="bash">
until [ $ZAHL -gt 5 ]; do
+
ZAHL=1
  echo "Zahl: $ZAHL"
+
until [ $ZAHL -gt 5 ]
  ZAHL=$((ZAHL+1))
+
do
done
+
  echo "Zahl: $ZAHL"
 +
  ZAHL=$((ZAHL+1))
 +
done
 +
</syntaxhighlight>
  
 
  Ausgabe:
 
  Ausgabe:
Zeile 32: Zeile 38:
  
 
== Beispiel – Wartebedingung ==
 
== Beispiel – Wartebedingung ==
*Die until-Schleife kann auch verwendet werden, um zu warten, bis eine Bedingung erfüllt ist.*
+
*Die until-Schleife kann auch verwendet werden, um zu warten, bis eine Bedingung erfüllt ist.
*Hier wird gewartet, bis eine bestimmte Datei existiert.*
+
*Hier wird gewartet, bis eine bestimmte Datei existiert.
  
until [ -f /tmp/ready.flag ]; do
+
<syntaxhighlight lang="bash">
  echo "Warte auf Datei /tmp/ready.flag..."
+
until [ -f /tmp/ready.flag ]
  sleep 2
+
do
done
+
  echo "Warte auf Datei /tmp/ready.flag..."
echo "Datei gefunden, weiter geht’s."
+
  sleep 2
 +
done
 +
echo "Datei gefunden, weiter geht’s."
 +
</syntaxhighlight>
  
 
== Beispiel – Mit Exit-Status prüfen ==
 
== Beispiel – Mit Exit-Status prüfen ==
*Wie bei der while-Schleife basiert auch die until-Schleife auf dem Rückgabewert von Befehlen.*
+
*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.*
+
*Sie läuft, solange der Exit-Code ≠ 0 ist.
  
ping -c1 10.0.0.1 > /dev/null 2>&1
+
<syntaxhighlight lang="bash">
echo $?
+
ping -c1 10.0.0.1 > /dev/null 2>&1
0
+
echo $?
 +
0
  
until ping -c1 10.0.0.1 > /dev/null 2>&1; do
+
until ping -c1 10.0.0.1 > /dev/null 2>&1
  echo "Host noch nicht erreichbar..."
+
do
  sleep 5
+
  echo "Host noch nicht erreichbar..."
done
+
  sleep 5
echo "Host antwortet!"
+
done
 +
echo "Host antwortet!"
 +
</syntaxhighlight>
  
 
== Beispiel – Datei zeilenweise prüfen ==
 
== Beispiel – Datei zeilenweise prüfen ==
*Die until-Schleife kann ebenfalls mit Eingabedateien kombiniert werden.*
+
*Die until-Schleife kann ebenfalls mit Eingabedateien kombiniert werden.
*Das folgende Beispiel wartet, bis eine Datei nicht mehr leer ist.*
+
*Das folgende Beispiel wartet, bis eine Datei nicht mehr leer ist.
  
until [ -s /tmp/log.txt ]; do
+
<syntaxhighlight lang="bash">
  echo "Datei /tmp/log.txt ist leer – warte..."
+
until [ -s /tmp/log.txt ]
  sleep 3
+
do
done
+
  echo "Datei /tmp/log.txt ist leer – warte..."
echo "Datei enthält nun Daten."
+
  sleep 3
 +
done
 +
echo "Datei enthält nun Daten."
 +
</syntaxhighlight>
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 69: Zeile 84:
 
* 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 "break" kann eine Schleife jederzeit beendet werden.
+
* Mit '''break''' kann eine Schleife jederzeit beendet werden.
* Mit "continue" kann der aktuelle Durchlauf übersprungen werden.
+
* 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.
+
== Aufgaben ==
* Schreiben Sie ein Skript, das wartet, bis eine Datei "/tmp/trigger" existiert.
+
* Erstellen Sie eine until-Schleife, die wartet, bis im Verzeichnis /tmp mindestens eine Datei mit der Endung .done liegt.
* Erstellen Sie ein Skript, das mit until wartet, bis ein Host erreichbar ist (ping).
+
* Schreiben Sie eine until-Schleife, die erst endet, wenn der Befehl systemctl is-active ssh einen Exit-Status 0 liefert.
* Fügen Sie nach jedem Schleifendurchlauf eine Ausgabe des Rückgabewerts ("echo $?") hinzu.
+
* Erstellen Sie eine until-Schleife, die so lange läuft, bis die Variable ZÄHLER den Wert 10 erreicht hat, wobei der Startwert aus einer Datei /tmp/startwert gelesen wird.
 +
* Schreiben Sie eine until-Schleife, die so lange läuft, bis der Befehl id -u backup fehlschlägt (Benutzer wurde gelöscht), und geben Sie danach „Benutzer entfernt“ aus.

Aktuelle Version vom 25. November 2025, 15:43 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

Aufgaben

  • Erstellen Sie eine until-Schleife, die wartet, bis im Verzeichnis /tmp mindestens eine Datei mit der Endung .done liegt.
  • Schreiben Sie eine until-Schleife, die erst endet, wenn der Befehl systemctl is-active ssh einen Exit-Status 0 liefert.
  • Erstellen Sie eine until-Schleife, die so lange läuft, bis die Variable ZÄHLER den Wert 10 erreicht hat, wobei der Startwert aus einer Datei /tmp/startwert gelesen wird.
  • Schreiben Sie eine until-Schleife, die so lange läuft, bis der Befehl id -u backup fehlschlägt (Benutzer wurde gelöscht), und geben Sie danach „Benutzer entfernt“ aus.