Ich weiß, was eine while
Schleife ist. Ich habe jedoch nur gesehen, dass es funktioniert mit:
while [condition]
while ![condition]
while TRUE (infinite loop)
Wo die Aussage danach while
entweder TRUE
oder sein muss FALSE
.
Es gibt einen Shell-Befehl namens builtin :
. Es wird als Dummy-Befehl beschrieben, der nichts tut, aber ich weiß nicht, ob es hier dasselbe ist, auch wenn es sein kann TRUE
oder nicht FALSE
. Vielleicht ist es etwas anderes, aber was?
bash
shell-script
Hai
quelle
quelle
:
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).:
Befehl nie ausgeführt wird, wird er keine 0 zurückgeben. Das ist meiner Meinung nach jedoch zu umständlich.Antworten:
Die Syntax lautet:
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.Läuft
cmd
für:
immer und ewig und bringt immer wieder Erfolg. Das ist die für immer Schleife. Sie könnentrue
stattdessen den Befehl verwenden, um die Lesbarkeit zu verbessern:Früher wurde bevorzugt,
:
wie:
immer, währendtrue
es nicht war (vor langer Zeit; die meisten Muscheln habentrue
heutzutage gebaut) ¹.Andere Varianten, die Sie vielleicht sehen:
Oben rufen wir den
[
Befehl auf, um zu testen, ob die Zeichenfolge "1" nicht leer ist (also auch immer wahr).Verwenden der Korn / bash / zsh-
((...))
Syntax zur Nachahmungwhile(1) { ...; }
von C.Oder mehr gewunden diejenigen mögen
until false; do cmd; done
,until ! true
...Diese sind manchmal voreingenommen wie:
Sie können also Folgendes tun:
Nur wenigen ist klar, dass es sich bei der Bedingung um eine Liste von Befehlen handelt. Zum Beispiel sehen Sie Leute, die schreiben:
Wann sie hätten schreiben können:
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üssenif
/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 vontrue
oderfalse
nicht angegeben ist, wenn Sie ein Argument übergeben. So kann man zum Beispiel tun:Aber das Verhalten von:
ist nicht spezifiziert (obwohl es in den meisten Shell /
false
Implementierungen funktionieren würde ).quelle
while :
ist eine Endlosschleife.:
macht einfach nichts (erfolgreich).Wenn Sie also möchten, dass Ihre Shell für immer hängt und nichts tut, können Sie sie wie folgt schreiben
Oder in einer einzelnen Zeile mit
;
anstelle von Zeilenumbrüchen:while :; do :; done
while :
wird normalerweise verwendet, wenn Sie wiederholt etwas tun möchten, ohne dass eine besondere Bedingung vorliegt. Sie könnten verwendencontinue
,break
Anweisungen innerhalb der Schleife um ihn zu steuern oder den Zustand bis zum Ende der Schleife wie ein bewegendo ... while
Konstrukt.quelle
Nein, der Befehl im Bedingungsteil kann ein beliebiger Befehl (*) sein . Alle Shell-Befehle haben einen bestimmten Rückgabewert, und die
while
Schleife (sowie dieif
Bedingung) nimmt Rückgabewerte von Null als "wahr" und alle anderen als "falsch" an. (* oder eine Liste mit mehreren Befehlen, der letzte zählt)Was
:
, Bash Anleitung sagt , was eindeutig der Rückgabestatus das heißt:Das
help
eingebaute ist noch deutlicher:quelle
s/any command/any sequence of commands/
, wie Stéphane klar macht.