Я написал сценарий bash, управляемый меню, который использует case switch
внутри цикла while
для выполнения различные варианты меню. Все работает нормально. Сейчас я пытаюсь улучшить программу, выполняя проверку ошибок при вводе пользователем, но мне кажется, что я не могу заставить ее работать ...
Проблема в том, что я не знаю, как правильно выйти из оператора switch, без выхода из цикла while (чтобы пользователь мог повторить попытку).
# repeat command line indefinitely until user quits
while [ "$done" != "true" ]
do
# display menu options to user
echo "Command Menu" # I cut out the menu options for brevity....
# prompt user to enter command
echo "Please select a letter:"
read option
# switch case for menu commands, accept both upper and lower case
case "$option" in
# sample case statement
a|A) echo "Choose a month"
read monthVal
if [ "$monthVal" -lt 13 ]
then
cal "$monthVal"
else
break # THIS DOES NOT WORK. BREAKS WHILE LOOP, NOT SWITCH!
fi
;;
q|Q) done="true" #ends while loop
;;
*) echo "Invalid option, choose again..."
;;
esac
done
exit 0
Программа работает нормально, когда пользователь вводит допустимое значение месяца, но если он вводит число больше 13, вместо того, чтобы прерывать оператор switch и повторять повторяется цикл, программа разрывает и переключатель, и цикл while и прекращает выполнение.