La declaración de caso anidada en el bucle While provoca un bucle infinito en el script BASH

La declaración de caso anidada en el bucle While provoca un bucle infinito en el script BASH

Estoy tratando de hacer que este script BASH requiera que el usuario ingrese un valor entre 1 y 4 para elegir una tortuga ninja en la declaración del caso. Cualquier otro valor hará que $COUNTER permanezca igual a 0, por lo que será necesario que la instrucción case se ejecute nuevamente. Sin embargo, termino en un bucle infinito si ingreso cualquier valor que no sea del 1 al 4.

1º: ¿Cómo anido una declaración de caso dentro de un bucle while?

2do: ¿Cómo hago para que este script requiera que el usuario ingrese un valor entre 1 y 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

Gracias por cualquier ayuda brindada.

Respuesta1

El error está en las líneas en las que incrementas COUNTER. El $símbolo se utiliza cuando se desea desreferenciar el nombre de una variable para obtener su valor. No se utiliza cuando asignas un valor a la variable. Esas líneas deberían decir:

COUNTER=$(( $COUNTER + 1 ))

y

COUNTER=0

Además, dado que el casecomando está dentro del whilebucle, supongo que desea volver a preguntarle al usuario si ingresa un valor no válido. Si es así, también debes poner la readdeclaración dentro del bucle.while

información relacionada