While

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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

  • Erstellen Sie eine while-Schleife, die von 1 bis 10 zählt und jede Zahl ausgibt.
  • Schreiben Sie ein Skript, das alle Zeilen einer Datei /etc/passwd einliest und nur die ersten fünf Zeilen ausgibt.
  • Erstellen Sie eine Endlosschleife, die alle 3 Sekunden prüft, ob eine Datei /tmp/testfile existiert, und beendet sich, wenn sie gefunden wird.
  • Erweitern Sie das Skript um die Ausgabe des Rückgabewerts mit echo $? nach jeder Prüfung.