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 case
Befehl außerdem innerhalb der while
Schleife 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 read
Anweisung while
ebenfalls innerhalb der Schleife platzieren.