A instrução de caso aninhada no While Loop faz com que o loop infinito no script BASH

1

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 eu inserir qualquer valor diferente de 1 a 4.

1º - Como faço para aninhar uma instrução de caso dentro de um loop while?

2nd - Como eu faço este script requer 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.

    
por D. Hess 27.05.2017 / 08:21

1 resposta

2

O erro está nas linhas em que você incrementa COUNTER . O símbolo $ é usado quando você quer cancelar a referência do nome de uma variável para obter seu valor. Não é usado quando você atribui um valor à variável. Essas linhas devem ler:

COUNTER=$(( $COUNTER + 1 ))

e

COUNTER=0

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

    
por 27.05.2017 / 08:31