2016-12-02 8 views
2

したがって、条件をループする方法を理解する上で問題があります。ここに私の例である:Bashスクリプト - 条件付きif/then

#!/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 

基本的に、私は何を探していますが、ユーザの入力であり、その条件が満たされない場合には、正しい入力が満たされるまでループバックだろう。 私は何が間違っていますか?この例では、FSUまたはUf以外の入力を次のように選択した場合、エラーが返されます。

"./ test.sh:行4:[:missing:]] ./test.sh:行4: UF:コマンドが見つかりません "

しかし、FSUまたはUFを選択した場合、同じエラーが発生します。

+0

'[" $ TEAM "!=" FSU "|| "UF"] 'は有効な構文ではありません。 '$ TEAM'とそれぞれの可能な文字列を比較する必要があります – fedorqui

+0

大きな問題はwhile行が' ["$ TEAM"!= "FSU" || "$ TEAM"!= "UF"];します。それ以外では、間違った場所でループを終了しています( 'done')。 – Phylogenesis

+0

第3に、[このページ](https://en.wikipedia.org/wiki/Florida%E2%80%93Florida_State_football_rivalry#Game_results)を見ると、あなたの 'if'節の結果は後方にあるようです。 – Phylogenesis

答えて

1

を修正スクリプト:

#!/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 

変更:Done場所で

見て、あなたは、ユーザー入力の検証パスの後while loopを終了する必要があります。

必要な入力が失敗した後にユーザーの入力を求める必要があります。したがってread -r TEAMwhile loopになります。

論理比較はwhile loopANDの代わりにORでした。

+0

その仕事。ありがとう。別のサイトの他の誰かから、whileループの中にif/then/elseステートメントを埋め込むと言われました。私はそれを試みていたが、うまくいかなかった。 私はあなたのスクリプトと少し違ったスクリプトを書きましたが、それはまだ動作します。私はif/then/else文を二重引用符で囲みませんでした。 – t3kg33k

+0

あなたはそれを行うことができます、あなたのシチュエーションに依存します。 'else else'が各whileループで検証されるようにしたい場合は、' loop block'の中に入れます。 –