2016-11-27 7 views
0

Ich versuche, ein Shell-Skript in OS X-Terminal auszuführen. Das Programm wird beendet, wenn Sie ein m oder a eingeben.While-Schleife im OR-Zustand funktioniert nicht. BASH-Shell

Problem ist, ich kann nicht die OR-Anweisung arbeiten.

#!/bin/sh 
read File 

while [ "$File" != "m" ] || [ "$File" != "a" ] 
do 
read File 
done 

Wenn ich nur

tun
while [ "$File" != "m" ] 

Es funktioniert völlig in Ordnung. Ich habe mehrere Methoden ausprobiert, wie

Keiner von ihnen scheint zu arbeiten. Der obige Code, den ich nicht gepostet nicht Looping zu stoppen, wenn der Benutzer gibt einen "m" oder ein

+3

Wahrscheinlich wollen Sie '' && statt '' ||. Die Bedingung, die Sie jetzt verwenden, wird immer als wahr ausgewertet, denn wenn eine der Alternativen falsch auswertet, wird die andere als wahr bewertet. Mit anderen Worten, deine Logik ist zweifelhaft. –

+0

Dieses Konstrukt ist auch sehr seltsam. Es wäre viel sauberer, es so zu schreiben, während man Datei liest; tue wenn test "$ File" = m || "$ Datei" = a; dann breche; fi ... '. Ihre aktuelle Konstruktion überprüft nicht, ob "Lesen" fehlschlägt, so dass sie sich seltsam verhält, wenn der Eingabestream beendet wird. –

+0

Bitte werfen Sie einen Blick auf: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

Antwort

2

Ich schlage vor,

while [ "$File" != "m" ] || [ "$File" != "a" ] 

von

while [ "$File" != "m" ] && [ "$File" != "a" ] 

oder

until [ "$File" = "m" ] || [ "$File" = "a" ] 
zu ersetzen

oder mit einer Regex (Bash):

while [[ ! $File =~ m|a ]] 

Siehe von bash: help until

+0

Das hat funktioniert! Vielen Dank! – user2856463

Verwandte Themen