Я пытаюсь сделать так, чтобы этот скрипт BASH требовал от пользователя ввода значения от 1 до 4 для выбора черепашки-ниндзя в операторе case. Любое другое значение приведет к тому, что $COUNTER останется равным 0, поэтому оператор case придется выполнить снова. Однако я попадаю в бесконечный цикл, если ввожу любое значение, отличное от 1 до 4.
1-й — Как вложить оператор case в цикл while?
2-й - Как сделать так, чтобы этот скрипт требовал от пользователя ввода значения от 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
Спасибо за любую оказанную помощь.
решение1
Ошибка в строках, в которых вы увеличиваете COUNTER
. $
Символ используется, когда вы хотите разыменовать имя переменной, чтобы получить ее значение. Он не используется, когда вы присваиваете значение переменной. Эти строки должны выглядеть так:
COUNTER=$(( $COUNTER + 1 ))
и
COUNTER=0
Кроме того, поскольку case
команда находится внутри while
цикла, я предполагаю, что вы хотите снова запросить пользователя, если он введет недопустимое значение. Если это так, вы должны поместить оператор также read
внутри цикла.while