WhileループのネストされたCaseステートメントのため、BASHスクリプトで無限ループが発生します。

WhileループのネストされたCaseステートメントのため、BASHスクリプトで無限ループが発生します。

私はこのBASHスクリプトで、ユーザーがケースステートメントからNinja Turtleを選択するために1から4の間の値を入力するように要求しようとしています。他の値を使用すると、$ COUNTERはゼロのままになるため、Caseステートメントを再実行する必要があります。ただし、1〜4以外の値を入力すると、無限ループに陥ります。

最初 - whileループ内にケースステートメントを入れ子にする方法は?

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

関連情報