Bash菜单-从子菜单返回主菜单?

时间:2019-05-22 10:25:34

标签: bash menu submenu

我在这里有一个简单的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

1 个答案:

答案 0 :(得分:0)

首先,break将脱离select。要离开子菜单while循环,您需要break 3(离开内部select,子菜单while和外部select)。

输入help break以获得更多信息。

关于另一种方法的简短说明,再次调用脚本:不应在每次迭代时启动新的子进程。 Bash具有一种“重新启动”程序的优雅方式:

exec "$0"

这将在当前进程中执行给定的可执行文件(在本例中为$0 –当前脚本)。有关更多信息,请参见exec() system call或键入help exec来阅读Bash的详细信息。