Shell-script: verwenden Sie while-Schleife zu überprüfen, string Inhalt mit [ ]
Ich versuche zu prüfen, ein string, der ausgegeben wird, von einem Programm, wenn der string entspricht einem bestimmten Inhalt, die while-Schleife beenden Sie das Programm. Zur gleichen Zeit, die ich brauche, um zu zählen, wie oft das Programm ausgeführt wurde:
x = "Lookup success" # this is supposed to be the output from the program
INTERVAL=0 # count the number of runs
while ["$x" != "Lookup failed"] # only break out the while loop when "Lookup failed" happened in the program
do
echo "not failed" # do something
$x = "Lookup failed" # just for testing the break-out
INTERVAL=(( $INTERVAL + 10 )); # the interval increments by 10
done
echo $x
echo $INTERVAL
Aber dieses shell-Skript funktioniert nicht mit diesem Fehler:
./test.sh: line 9: x: command not found
./test.sh: line 12: [[: command not found
Könnte mir bitte jemand helfen? Ich Schätze Ihre Hilfe.
- Freundlicherweise akzeptieren oder upvote die Antworten, wenn es Ihnen geholfen hat.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Leerzeichen um den
[
name des Befehls. Sie brauchen auch einen Raum, bevor die]
argument am Ende des Befehls ein.Du auch nicht haben Bereiche rund um Aufgaben in der Schale. Und Ihre Zuweisung in der Schleife nicht mit einem
$
an den start.Fügen Sie ein Leerzeichen nach
[
und vor]
.Auch, wie Jonathan schon sagte, können Sie nicht den Raum haben, in den Zuweisungen als auch.
Nicht sicher ob es eine shell akzeptieren würde, INTERVALL=((...)); meine version der ksh und bash auf beiden Plattformen nicht. INTERVAL=$((...)) funktioniert:
Credits gehen an @JonathanLeffler. Ich werde zu schätzen-up-Stimmen, so dass ich Nächstes mal nicht copy-paste, andere' Lösung für den Hinweis auf einen einfachen Tippfehler (Kommentar Rechte beginnen mit rep>=50).