4.14 Endlosschleifen
Manchmal benötigt man ein Konstrukt, das endlos ausgeführt wird. Hierzu verwendet man gewöhnlich Endlosschleifen. In einer Endlosschleife werden die Kommandos zwischen do und done endlos ausgeführt, ohne dass die Schleife abgebrochen wird. Sie sollten also bedenken, dass hiermit das Script niemals mehr beenden wird und zur aufrufenden Shell zurückkehrt. Daher werden gewöhnlich Scripts mit einer Endlosschleife im Hintergrund mit & ausgeführt (./scriptname &).
Um eine Endlosschleife zu erzeugen, gibt es verschiedene Möglichkeiten. Letztendlich muss nur die Bedingung bei einer Überprüfung gegeben sein. Folglich müsste die Bedingung bei einer while-Schleife immer wahr und bei einer until-Schleife immer falsch sein. Zu diesen Zweck hat man die Kommandos true (für wahr) und false (für falsch) eingeführt. Mit while erreichen Sie so folgendermaßen eine Endlosschleife:
while true
do
# Kommandos der Endlosschleifen
done
Gleiches mit until:
until false
do
# Kommandos der Endlosschleife
done
Hier eine solche Endlosschleife in der Praxis:
# Demonstriert eine Endlosschleife mit while
# aneverending
while true
do
echo "In der Endlosschleife"
sleep 5 # 5 Sekunden warten
done
Das Script bei der Ausführung:
you@host > ./aneverending
In der Endlosschleife
In der Endlosschleife
In der Endlosschleife
(Strg)+(C)
you@host >
Dieses Script müssen Sie mit dem Signal SIGINT, generiert durch die Tastenkombination (Strg)+(C), quasi mit Gewalt beenden.
Richtig eingesetzt werden Endlosschleifen in Scripts, mit denen man bestimmte Dienste überwacht oder in gewissen Zeitabständen (bspw. mit sleep) gewisse Aktionen ausführen will, wie z. B. das Überprüfen des Mail-Postfachs oder die Verfügbarkeit eines Servers. In der Praxis werden Endlosschleifen recht gern eingesetzt, wobei hier auch mit dem Befehl break gearbeitet werden sollte. Sind zum Beispiel irgendwelche Grenzen oder Fehler (bzw. Bedingungen) aufgetreten, wird break verwendet, wodurch die Endlosschleife beendet wird. Häufig wird dies dann so erreicht:
while true
do
# Viele Kommandos
if [ Bedingung ]
then
break
fi
done
# eventuell noch einige Aufräumarbeiten ...
Hinweis In diesem Kapitel wurden viele Beispiele verwendet, in denen Dateien kopiert oder ausgelesen werden. Es sollte noch erwähnt werden, dass es hierbei häufig zu Problemen mit der Variable IFS kommen kann (siehe Abschnitt 5.3.6), weil viele Benutzer gern Dateinamen oder Verzeichnisse mit einem Leerzeichen trennen. Dies ist ein Ärgernis, das schwer zu kontrollieren ist. Eine mögliche Lösung des Problems finden Sie im Praxisteil des Buchs (siehe Abschnitt 15.2.1). Das Abfangen des Fehlers ist sehr wichtig, um ein inkonsistentes Backup zu vermeiden.
|
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
|