Instrução Case aninhada em While Loop causa loop infinito no script BASH

Instrução Case aninhada em While Loop causa loop infinito no script BASH

Estou tentando fazer com que este script BASH exija que o usuário insira um valor entre 1 e 4 para escolher uma tartaruga ninja na instrução case. Qualquer outro valor fará com que $COUNTER permaneça igual a 0, exigindo, portanto, que a instrução case seja executada novamente. No entanto, acabo em um loop infinito se inserir qualquer valor diferente de 1 a 4.

1º - Como aninhei uma instrução case dentro de um loop while?

2º - Como faço para que esse script exija que o usuário insira um valor entre 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

Obrigado por qualquer ajuda fornecida.

Responder1

O erro está nas linhas em que você incrementa o COUNTER. O $símbolo é usado quando você deseja desreferenciar o nome de uma variável para obter seu valor. Não é usado quando você atribui um valor à variável. Essas linhas devem ser lidas:

COUNTER=$(( $COUNTER + 1 ))

e

COUNTER=0

Além disso, como o casecomando está dentro do whileloop, presumo que você queira avisar o usuário novamente se ele inserir um valor inválido. Se for assim, você também deve colocar a readinstrução dentro do loop.while

informação relacionada