While 迴圈中巢狀的 Case 語句導致 BASH 腳本中出現無限迴圈

While 迴圈中巢狀的 Case 語句導致 BASH 腳本中出現無限迴圈

我試圖讓這個 BASH 腳本要求使用者輸入 1 到 4 之間的值來在 case 語句中選擇忍者龜。任何其他值都會導致 $COUNTER 保持等於 0,因此需要再次執行 case 語句。但是,如果輸入 1 到 4 以外的任何值,就會陷入無限循環。

第一 - 如何在 while 迴圈內嵌套 case 語句?

第二 - 如何使此腳本要求使用者輸入 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

相關內容