Ich versuche, eine while-Schleife in bash zu erstellen, die erst fortgesetzt wird, wenn der Benutzer das Wort "next" eingibt. Ich kann jedoch nicht herausfinden, wie man Zeichenfolgen für die Bedingung verwendet.
#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" -ne "next" ]
do
read word
done
#the rest of the code
shell-script
RootFAIL
quelle
quelle
while [ "$word" = "next" ]
Die -eq wird für den numerischen Vergleich verwendetAntworten:
Wie andere angegeben haben, sollten Sie den
-ne
Ganzzahlvergleich nicht zum Vergleichen von Zeichenfolgen verwenden, sondern=/!=
intest
[
Klammern]
. Aber immer noch, auch die spröde bestenfalls - die Saiten genau übereinstimmen müssen, und''
tut gleich''
.case
In diesem Zusammenhang ist es oft besser, mit s umzugehen:Es wurde ein Standardwert für
$IFS
(der einen Blick wert ist, wenn Sie Shellread
s ausführen möchten) bereitgestellt, der für jeden oberen / unteren Wert vonnext
(falls erforderlich) funktionieren und verhindern sollte, dass die Schleife ohne Ende wegläuft.quelle
Verwenden Sie
!=
anstelle von-ne
Überprüfen Sie dies für Vergleichsoperatoren. http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html
quelle
Ich denke du willst:
Es ist eine gute Idee, auch auf stdin nach Dateiende zu suchen (hier durch Überprüfen des Exit-Status von
read
).quelle
read ... && case
zuerst, aber es schien einfacher zu sein, nur ein niedriges Limit festzulegen, da eine außer Kontrolle geratene tty-Leseschleife ärgerlicher wäre als 5 Lesevorgänge. Trotzdem - es war faul. Ich nehme an, ich könnte$?.$#$word
jetzt tun , wo ich darüber nachdenke ...Sie verwenden den falschen Vergleichsoperator. Sie sollten "! =" Für Zeichenfolgen und "-ne" für Ganzzahlen wie folgt verwenden:
Kasse dieser Seite: Advanced
bash
Scripting: Vergleichsvorgängequelle