我需要帮助。我是 Bash Shell 编程的新手,我有任务要做。因此,我需要制作菜单并在菜单中制作子菜单。我的意思是,然后您按 5(数据库管理),它必须显示带有 3 个选项的子菜单。我尝试了一些 if 方法,但我无法完成。这是我的代码:
#!/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,则会弹出另一个菜单,其中包含“备份”,“删除”,“恢复”,谢谢。
答案1
我建议对子菜单使用 shell 函数 - 以及使代码更易于管理,它允许您定义一个,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
当然,如果您愿意,您也可以在 shell 函数中定义主菜单。
答案2
我知道这是后期添加的 - 您也许可以使用我正在开发的这个菜单程序:https://github.com/steveh250/Unix-Menu-Program/tree/1.11