8

という変数がありますchoice。ここで、入力された値を比較するために if を使用しようとします。

read $choice

if [ "$choice" ==  2  ];then
       #do something
elif [ "$choice" == 1 ];then
       #do something else
else
     echo "Invalid choice!!"
fi

1 または 2 のいずれかを入力すると、出力は無効な選択に直接進みます。if ステートメント内で 1 と 2 を引用符で囲みました。それでもうまくいきませんでした。を使用-eqすると、「単項演算子が必要です」というエラーが表示されます。ここで何が間違っていますか?

4

3 に答える 3

21

あなたのread行は正しくありません。次のように変更します。

read choice

つまり、値ではなく、設定する変数の名前を使用します。

-eq整数を比較するための正しいテストです。説明については、を参照man testしてください (またはman bash)。

read別の方法は、代わりに算術評価を使用することです (ただし、正しいステートメントが必要です)。

read choice

if (( $choice == 2 )) ; then
    echo 2
elif (( $choice == 1 )) ; then
    echo 1
else
    echo "Invalid choice!!"
fi
于 2013-08-10T11:06:02.543 に答える
4

あなたの例では、caseおそらくあなたが望むもののようです:

read choice

case "$choice" in
"1")
    echo choice 1;
    ;;
"2")
    echo choice 2;
    ;;
*)
    echo "invalid choice"
    ;;
esac
于 2013-08-10T11:13:30.303 に答える
3

非現実的な答えreadは、変数名を取るため、名前を別の変数で指定できることを指摘するだけです。

choice=choice   # A variable whose value is the string "choice"
read $choice    # $choice expands to "choice", so read sets the value of that variable
if [[ $choice -eq 1 ]]; then   # or (( choice == 1 ))
于 2013-08-10T12:30:41.033 に答える