While 루프에 중첩된 Case 문으로 인해 BASH 스크립트에서 무한 루프가 발생함

While 루프에 중첩된 Case 문으로 인해 BASH 스크립트에서 무한 루프가 발생함

나는 이 BASH 스크립트에서 사용자가 Case 문에서 닌자 거북이를 선택하기 위해 1에서 4 사이의 값을 입력하도록 요구하도록 만들려고 합니다. 다른 값을 사용하면 $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도 해당 명령문을 넣어야 합니다.

관련 정보