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

相关内容