While 루프의 중첩 Case 문으로 인해 BASH 스크립트에서 무한 루프가 발생합니다.

While 루프의 중첩 Case 문으로 인해 BASH 스크립트에서 무한 루프가 발생합니다.

나는 이 BASH 스크립트에서 사용자가 Case 문에서 Ninja Turtle을 선택하기 위해 1에서 4 사이의 값을 입력하도록 요구하도록 만들려고 합니다. 다른 값을 사용하면 $COUNTER가 0으로 유지되므로 Case 문을 다시 실행해야 합니다. 하지만 1~4 이외의 값을 입력하면 무한 루프에 빠지게 됩니다.

첫 번째 - while 루프 안에 사례 문을 중첩하는 방법은 무엇입니까?

두 번째 - 이 스크립트를 작성하여 사용자에게 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

관련 정보