我在这里有一个简单的Bash菜单。一切似乎都很好,但我无法弄清楚如何从子菜单返回主菜单。执行脚本后,我选择“ 3”从此处进入“子菜单”,再按一次“ 3”返回“主菜单”,但它只会向我显示“子菜单”选项。>
我尝试用“ ./menu.sh”(这是我的脚本的名称)替换“ break”,这似乎确实有效,但是,我确定这可能不是解决此问题的最理想方法。 / p>
#!/bin/bash
clear
while true
do
clear
echo "######"
echo " Menu"
echo "######"
echo ""
PS3='Select an option: '
options=("Option1" "Option2" "SubMenu" "Exit")
select opt in "${options[@]}"
do
case $opt in
"Option1")
echo Option1
read -p ""
break
;;
"Option2")
echo Option2
read -p ""
break
;;
"SubMenu")
while true
do
clear
echo "#########"
echo " SubMenu"
echo "#########"
echo ""
PS3='Select an option: '
options=(
"SubMenu Option1"
"SubMenu Option2"
"Main Menu"
)
select opt2 in "${options[@]}"
do
case $opt2 in
"SubMenu Option1")
echo "Sub-Menu Option1"
read -p ""
break
;;
"SubMenu Option2")
echo "Sub-Menu Option2"
read -p ""
break
;;
"Main Menu")
"./menu"
;;
*) echo "invalid option";;
esac
done
done
;;
"Exit")
exit
;;
*) echo "invalid option"
;;
esac
done
done
答案 0 :(得分:0)
首先,break
将脱离select
。要离开子菜单while
循环,您需要break 3
(离开内部select
,子菜单while
和外部select
)。>
输入help break
以获得更多信息。
关于另一种方法的简短说明,再次调用脚本:不应在每次迭代时启动新的子进程。 Bash具有一种“重新启动”程序的优雅方式:
exec "$0"
这将在当前进程中执行给定的可执行文件(在本例中为$0
–当前脚本)。有关更多信息,请参见exec()
system call或键入help exec
来阅读Bash的详细信息。