Мне нужна помощь. Я новичок в программировании оболочки Bash, у меня есть задача. Итак, мне нужно сделать меню и в меню подменю. Я имею в виду, тогда вы нажимаете 5 (управление базой данных), чтобы отобразить подменю с 3 вариантами. Я попробовал несколько методов с, но я не могу сделать это. Это мой код:
#!/bin/bash
PS3='Please enter your option: '
options=("Buy" "Sale" "Change data" "View cars" "Database management" "Calculate profits" "Sold cars" "Vechiles in stock" "Exit program")
select opt in "${options[@]}"
do
case $opt in
"Buy")
echo "you chose choice 1"
;;
"Sale")
;;
"Change data")
;;
"View cars")
;;
"Database management")
PS3='Please enter your option: '
options=("1" "2" "3")
select opt in "${options[@]}"
do
case $opt in
"1")
echo "you chose choice 1"
;;
"2")
echo "you chose choice 2"
"3")
echo "you chose choice 3"
;;
"Calculate profits")
;;
"Sold cars")
;;
"Vechiles in stock")
;;
"Exit program")
break
;;
*)
echo "invalid option $REPLY"
;;
esac
done
Если нажать 5, должно появиться другое меню с «Резервное копирование», «Удалить», «Восстановить», Спасибо.
Я бы предложил использовать функцию оболочки для подменю - помимо того, что код стал более управляемым, он позволяет вам определить local PS3
, чтобы пользователю было легче отслеживать, в каком меню он находится. Минимальным прототипом может быть что-то вроде
# submenu
submenu () {
local PS3='Please enter sub option: '
local options=("Sub menu item 1" "Sub menu item 2" "Sub menu quit")
local opt
select opt in "${options[@]}"
do
case $opt in
"Sub menu item 1")
echo "you chose sub item 1"
;;
"Sub menu item 2")
echo "you chose sub item 2"
;;
"Sub menu quit")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
# main menu
PS3='Please enter main option: '
options=("Main menu item 1" "Submenu" "Main menu quit")
select opt in "${options[@]}"
do
case $opt in
"Main menu item 1")
echo "you chose main item 1"
;;
"Submenu")
submenu
;;
"Main menu quit")
exit
;;
*) echo "invalid option $REPLY";;
esac
done
Конечно, вы можете также определить главное меню в функции оболочки.
Позднее добавление, я знаю - вы можете использовать эту программу меню, над которой я работаю: https://github.com/steveh250/Unix-Menu-Program/ tree/1.11
Последняя версия: https://github.com/steveh250/Unix-Menu-Program