Я создаю скрипт bash, и я хочу создать меню. Когда я запускаю код, он отображает меню, но проблема заключается в том, когда пользователь вводит выбор, он постоянно перепечатывает меню, чтобы спрашивать снова и снова, независимо от того, какой выбор был выбран.
#!/bin/bash
declare -i choice=1;
while ((choice!=5))
do
echo "Main Menu:"
echo -e "\t(a) Add"
echo -e "\t(b) Remove"
echo -e "\t(c) Seach"
echo -e "\t(d) Display"
echo -e "\t(e) Exit"
echo -n "Please enter your choice:"
read choice
case $choice in
"a"|"A")
echo "You entered a"
;;
"b"|"B")
echo "You entered b"
;;
"c"|"C")
echo "You entered c"
;;
"d"|"D")
echo "You entered d"
;;
"e"|"E")
echo "You entered e"
((choice=5))
;;
*)
echo "invalid answer"
;;
esac
done
Вы можете сделать это с помощью встроенной функции select:
echo "Main Menu:"
echo -e "\t(a) Add a contact"
echo -e "\t(b) Remove a contact"
echo -e "\t(c) Seach contacts"
echo -e "\t(d) Display contacts"
echo -e "\t(e) Exit"
echo "Please enter your choice:"
choices=("a" "b" "c" "d" "e" "Quit")
select choice in "${choices[@]}"
do
case $choice in
"a")
echo "you chose choice a"
;;
"b")
echo "you chose choice b"
;;
"c")
echo "you chose choice c"
;;
"d")
echo "you chose choice d"
;;
"e")
echo "you chose choice e"
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
Это проще в использовании, и вы можете прочитать свой файл choices из файла. Также, если вы хотите выйти из меню для любого choice, просто добавьте break после каждого choice.
Откройте терминал и введите:
sudo apt-get install 9menu
9menu создает X меню из оболочки. Это простая программа, которая позволяет вам создавать X-меню из оболочки, где каждый элемент меню будет запускать команду.
Выполните следующую команду для создания вашего меню:
9menu -label "Main Menu" 'Add:echo "You entered a"' 'Remove:echo "You entered b"' 'Search:echo "You entered c"' 'Display:echo "You entered d"' 'Exit:echo "You entered e"'
[d3 ] Все это делается с помощью одной однолинейной команды, и поскольку 9menu отображает меню графически, нет необходимости добавлять условие ошибки «недействительного ответа», поскольку элементы меню выбираются из окна главного меню с помощью мыши и есть только пять возможных записей в меню, которые можно выбрать, щелкнув их мышью. Я предлагаю вам сделать следующее усовершенствование исходной идеи меню. Вместо того, чтобы отображать «Вы ввели e», когда вы нажимаете «Выход», почему бы не использовать элемент меню выхода, чтобы закрыть окно Главное меню и выйти из 9menu? Для этого используйте следующую команду:
9menu -label "Main Menu" 'Add:echo "You entered a"' 'Remove:echo "You entered b"' 'Search:echo "You entered c"' 'Display:echo "You entered d"' exit