Ich habe meine Skripte so geschrieben:
some_command
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
Es hat mich immer geärgert, dass ich some_command
zweimal schreiben muss . Kann ich es irgendwie in den Loop-Testabschnitt legen?
shell-script
Mihai
quelle
quelle
while ! some_command; do several; commands; sleep 1; done
Dafür ist die
until
Schleife gedacht:Es ist die logische Negation einer
while
Schleife.Die Spezifikation sagt:
Die
until
SchleifeDie
until
Schleife soll kontinuierlich eine Verbindungsliste ausführen, solange eine andere Verbindungsliste einen Nicht-Null-Ausgangsstatus hat.Das Format der till-Schleife lautet wie folgt:
until
Befehl abgeschlossen. Andernfalls wird die Verbindungsliste 2 ausgeführt und der Vorgang wiederholt.quelle
Sie können einfach Folgendes tun:
dies hat jedoch den nachteil, dass es immer eine sekunde zuerst schläft
Wenn Sie in der Lage sein möchten, mit einer Reihe von Befehlen zu beenden, um mit 0 zu beenden, können Sie Folgendes tun:
das funktioniert natürlich auch nur für
some_command
quelle
[
und]
um die Befehle enthalten.Weder funktioniert
while ! ...
nochuntil ...
auf den Systemen, die ihre Shell-Umgebung vor POSIX.1-2001 eingefroren haben. Das tut es jedoch.Wenn Sie keine vollständige Portabilität benötigen, warum schreiben Sie ein Shell-Skript? Perl ist mit größerer Wahrscheinlichkeit verfügbar als Bash.
(Wie oben wird das
sleep
nur ausgeführt, wenn der Befehl fehlschlägt.)quelle