#bash
#bash
Вопрос:
Я только начал изучать сценарии bash и пытаться практиковать циклы и операторы if, поэтому, пожалуйста, потерпите меня. Когда я запускаю скрипт, я всегда получаю печать
You entered an invalid option.
Независимо от того, какой вариант я выбираю, это означает, что loopControl
значение не изменилось.
loopControl="z"
echo "Choose one of the following options."
while [ "$loopControl" != "Q" ] amp;amp; [ "$loopControl" != "q" ] do
echo "A"
echo "B"
echo "C"
echo "Q";
read $loopControl
if [ "$loopControl" == "A" ] || [ "$loopControl" == "a" ]
then echo "option A works"
elif [ "$loopControl" == "B" ] || [ "$loopControl" == "b" ]
then echo "option B works"
elif [ "$loopControl" == "C" ] || [ "$loopControl" == "c" ]
then echo "option c works"
else
echo "You entered an invalid option."
fi
done
Ответ №1:
Заменить:
read $loopControl
С:
read loopControl
Тогда ваш код будет работать.
Полный сценарий:
$ cat script.sh
#!bin/bash
loopControl="z"
echo "Choose one of the following options."
while [ "$loopControl" != "Q" ] amp;amp; [ "$loopControl" != "q" ]
do
echo "A"
echo "B"
echo "C"
echo "Q"
read -r loopControl
if [ "$loopControl" == "A" ] || [ "$loopControl" == "a" ]
then
echo "option A works"
elif [ "$loopControl" == "B" ] || [ "$loopControl" == "b" ]
then
echo "option B works"
elif [ "$loopControl" == "C" ] || [ "$loopControl" == "c" ]
then
echo "option c works"
else
echo "You entered an invalid option."
fi
done
В процессе работы это работает следующим образом:
$ bash script.sh
Choose one of the following options.
A
B
C
Q
a
option A works
A
B
C
Q
B
option B works
A
B
C
Q
c
option c works
A
B
C
Q
q
You entered an invalid option.
Альтернатива: использование select
Более обычный способ получить меню bash
— использовать select
:
$ cat script2.sh
#!bin/bash
loopControl="z"
echo "Choose one of the following options."
select loopControl in A B C Q
do
case "$loopControl" in
A) echo "option A works" ;;
B) echo "option B works" ;;
C) echo "option c works" ;;
Q) exit ;;
*) echo "You entered an invalid option." ;;
esac
done
Это работает немного по-другому: вводится число для параметра. Но конечный результат очень похож:
$ bash script2.sh
Choose one of the following options.
1) A
2) B
3) C
4) Q
#? 1
option A works
#? 3
option c works
#? 5
You entered an invalid option.
#? 4
$