この BASH スクリプトでは、case ステートメントで忍者タートルを選択するために、ユーザーが 1 から 4 までの値を入力するように要求しようとしています。他の値を入力すると、$COUNTER は 0 のままになるため、case ステートメントを再度実行する必要があります。ただし、1 から 4 以外の値を入力すると、無限ループに陥ってしまいます。
1つ目 - while ループ内に case ステートメントをネストするにはどうすればよいですか?
2番目 - このスクリプトでユーザーに1〜4の値の入力を要求するにはどうすればよいでしょうか
#!/bin/bash
echo "What is your favorite Ninja Trutle?"
echo "1 - Raphael."
echo "2 - Leonardo."
echo "3 - Michelangelo"
echo "4 - Donatello"
read TURTLE;
COUNTER=0;
while [ $COUNTER -eq 0 ]
do
$COUNTER=$(( $COUNTER + 1 ))
case $TURTLE in
1) echo "Raphael is cool, but rude.";;
2) echo "Leonardo leads.";;
3) echo "Michelangelo is a party dude.";;
4) echo "Donatello does machines.";;
*) echo "Did you even watch the show?"
$COUNTER=0
;;
esac
done
ご協力いただきありがとうございます。
答え1
エラーは、 を増分する行にありますCOUNTER
。$
シンボルは、変数の名前を逆参照してその値を取得するときに使用されます。変数に値を割り当てるときには使用されません。これらの行は次のように記述する必要があります。
COUNTER=$(( $COUNTER + 1 ))
そして
COUNTER=0
また、case
コマンドがループ内にあるためwhile
、無効な値を入力した場合にユーザーに再度プロンプトを表示したいと想定します。その場合は、ステートメントもループread
内に配置する必要がありま すwhile
。