2016-12-02 1 views
2

So habe ich ein Problem zu verstehen, wie man eine Bedingung Schleife. Hier ist mein Beispiel:Bash-Skript - Während Bedingung mit wenn/dann

#!/bin/bash 
echo " Which team do you prefer, FSU or UF?" 
read -r TEAM 
while [ "$TEAM" != "FSU" || "UF" ]; do 
     echo "That was not one of your choices. Please choose FSU or UF" 
if [ "$TEAM" == "FSU" ]; then 
     echo "You chose the better team" 
else [ "$TEAM" == "UF" ]; 
     echo "You did NOT choose the better team" 
fi 
done 

Im Grunde, was ich suche ist eine Benutzereingabe und wenn diese Bedingung nicht erfüllt ist, würde es Schleife zurück, bis der richtige Eingang erfüllt ist. Was mache ich falsch? In diesem Beispiel erhalte ich einen Fehler zurück, wenn ich eine Eingabe außerhalb von FSU oder Uf wähle als:

"./test.sh: Zeile 4: [: fehlende`] ' ./test.sh: Zeile 4: UF: Befehl nicht gefunden "

Wenn ich jedoch FSU oder UF auswähle, bekomme ich den gleichen Fehler.

+0

'[" $ TEAM "! =" FSU "|| "UF"] 'ist keine gültige Syntax. Sie müssen '$ TEAM' mit jeder möglichen Zeichenfolge vergleichen – fedorqui

+0

Das Hauptproblem ist die while Zeile sollte' while ["$ TEAM"! = "FSU" || lesen "$ TEAM"! = "UF"]; mach es. Ansonsten enden Sie Ihre Schleife ("fertig") an der falschen Stelle. – Phylogenesis

+0

Drittens scheint es, dass die Ergebnisse Ihrer "if" -Klausel rückwärts sind, wenn man auf [diese Seite] (https://en.wikipedia.org/wiki/Florida%E2%80%93Florida_State_football_rivalry#Game_results) schaut. – Phylogenesis

Antwort

1

Fest Script:

#!/bin/bash 
echo " Which team do you prefer, FSU or UF?" 
read -r TEAM 
while [[ "$TEAM" != "FSU" && "$TEAM" != "UF" ]]; do 
     echo "That was not one of your choices. Please choose FSU or UF" 
     read -r TEAM 
done 
if [[ "$TEAM" == "FSU" ]]; then 
     echo "You chose the better team" 
else [[ "$TEAM" == "UF" ]]; 
     echo "You did NOT choose the better team" 
fi 

Änderungen:

Blick auf Done Lage, Sie müssen die while loop, nachdem der Benutzer Eingabevalidierung Pass verlassen.

Sie müssen nach der Eingabe des Benutzers fragen, nachdem er mit der erforderlichen Eingabe fehlgeschlagen ist. daher die read -r TEAM in while loop.

Ihr logischer Vergleich war OR anstelle von AND in der while loop.

+0

Ok. Diese Arbeit. Vielen Dank. Mir wurde von jemand anderem auf einer anderen Website gesagt, dass Sie die if/then/else-Anweisung in die while-Schleife einbetten würden. Ich habe das versucht, aber es würde nicht funktionieren. Also, ich schrieb mein Skript ein wenig anders als Ihres und es funktioniert immer noch. Ich habe die if/then/else-Anweisung nicht doppelt geklammert. – t3kg33k

+0

Sie können das tun, hängt von Ihrer Situation ab. Wenn Sie möchten, dass 'if else' auf jeder 'while loop' validiert wird, fügen Sie das in Ihren' loop block' ein, aber das ist nicht das, was wir gerade wollen. –