Die Syntax lautet:
while
first list of commands
do
second list of commands
done
Dies führt die zweite Befehlsliste in einer Schleife aus, solange die erste Befehlsliste (also die letzte Ausführung in dieser Liste) erfolgreich ist.
In dieser ersten Liste von Befehlen können Sie den [
Befehl verwenden, um verschiedene Arten von Tests durchzuführen, oder Sie können den :
Befehl null verwenden, der nichts tut und Erfolg zurückgibt, oder einen anderen Befehl.
while :; do cmd; done
Läuft cmd
für :
immer und ewig und bringt immer wieder Erfolg. Das ist die für immer Schleife. Sie können true
stattdessen den Befehl verwenden, um die Lesbarkeit zu verbessern:
while true; do cmd; done
Früher wurde bevorzugt, :
wie :
immer, während true
es nicht war (vor langer Zeit; die meisten Muscheln haben true
heutzutage gebaut) ¹.
Andere Varianten, die Sie vielleicht sehen:
while [ 1 ]; do cmd; done
Oben rufen wir den [
Befehl auf, um zu testen, ob die Zeichenfolge "1" nicht leer ist (also auch immer wahr).
while ((1)); do cmd; done
Verwenden der Korn / bash / zsh- ((...))
Syntax zur Nachahmung while(1) { ...; }
von C.
Oder mehr gewunden diejenigen mögen until false; do cmd; done
, until ! true
...
Diese sind manchmal voreingenommen wie:
alias forever='while :; do'
Sie können also Folgendes tun:
forever cmd; done
Nur wenigen ist klar, dass es sich bei der Bedingung um eine Liste von Befehlen handelt. Zum Beispiel sehen Sie Leute, die schreiben:
while :; do
cmd1
cmd2 || break
cmd3
done
Wann sie hätten schreiben können:
while
cmd1
cmd2
do
cmd3
done
Es ist sinnvoll, wenn es sich um eine Liste handelt, da Sie häufig auch Dinge tun möchten, while cmd1 && cmd2; do...; done
die Befehlslisten sind.
In jedem Fall beachten Sie, dass [
ein Befehl wie jedes andere ist (obwohl es ist eingebaut in modernen Bourne-wie Muscheln), ist es nicht nur in den verwendet werden müssen if
/ while
/ until
Konditionslisten, und diese Konditionslisten haben nicht um diesen Befehl mehr als jeden anderen Befehl zu verwenden.
¹ :
ist auch kürzer und akzeptiert Argumente (die ignoriert werden). Während das Verhalten von true
oder false
nicht angegeben ist, wenn Sie ein Argument übergeben. So kann man zum Beispiel tun:
while : you wait; do
something
done
Aber das Verhalten von:
until false is true; do
something
done
ist nicht spezifiziert (obwohl es in den meisten Shell / false
Implementierungen funktionieren würde ).
:
führt nichts aus, sondern wird immer mit dem Rückkehrcode 0 beendet. Es ist also dasselbe wie zuvorwhile true
(vorausgesetzt, Ihr System hat einetrue
ausführbare Datei).