In einer While-Schleife verschachtelte Case-Anweisung verursacht eine Endlosschleife im BASH-Skript

In einer While-Schleife verschachtelte Case-Anweisung verursacht eine Endlosschleife im BASH-Skript

Ich versuche, dieses BASH-Skript so zu gestalten, dass der Benutzer einen Wert zwischen 1 und 4 eingeben muss, um in der Case-Anweisung eine Ninja-Schildkröte auszuwählen. Bei jedem anderen Wert bleibt $COUNTER gleich 0, sodass die Case-Anweisung erneut ausgeführt werden muss. Wenn ich jedoch einen anderen Wert als 1 bis 4 eingebe, lande ich in einer Endlosschleife.

1. – Wie verschachtele ich eine Case-Anweisung in einer While-Schleife?

2. - Wie kann ich dieses Skript so einrichten, dass der Benutzer einen Wert zwischen 1 und 4 eingeben muss?

#!/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

Vielen Dank für jede Hilfe.

Antwort1

Der Fehler liegt in den Zeilen, in denen Sie inkrementieren COUNTER. Das $Symbol wird verwendet, wenn Sie den Namen einer Variablen dereferenzieren möchten, um ihren Wert zu erhalten. Es wird nicht verwendet, wenn Sie der Variablen einen Wert zuweisen. Diese Zeilen sollten lauten:

COUNTER=$(( $COUNTER + 1 ))

Und

COUNTER=0

Da sich der caseBefehl außerdem innerhalb der whileSchleife befindet, gehe ich davon aus, dass Sie den Benutzer erneut auffordern möchten, wenn er einen ungültigen Wert eingibt. Wenn das der Fall ist, sollten Sie die readAnweisung whileebenfalls innerhalb der Schleife platzieren.

verwandte Informationen