bash : got to the upper imbricated case

标签 bash menu case

这是我的第一个问题,所以我希望我足够清楚 我在案例中的案例中遇到以下问题。 第一个是触发功能的菜单。函数内部还有另一种情况。如果用户选择“否”,他应该返回到第一种情况。 除了启动第一个脚本(包含第一个案例)之外,我还没有找到如何做到这一点:

menu.sh:

source ./functions.sh

#read answer

while read answer;do

    case $answer in

    1)
        function1
    ;;

    2)
        function2
    ;;
    3)
       # the same, without function 
       read -p "do you want to continue [y/n] ?" choice

       case $choice in
       y|Y)
            # DO SOME STUFF
            menu.sh
       ;;   
       n|N )
            ./menu.sh 
       ;;
       *) 
            echo "invalid input"
           ./menu.sh
       ;;
       esac

    4)
        function4
    ;;

    5)
        quit
    ;;
    esac
done

functions.sh:

function1() {

read -p "do you want to continue [y/n] ?" choice

       case $choice in
       y|Y)
            # DO SOME STUFF and go back to menu
            echo "hello"
            menu.sh
       ;;   
       n|N )
            ./menu.sh 
       ;;
       *) 
            echo "invalid input"
           ./menu.sh
       ;;
       esac


}

正如您所看到的,当该功能启动时,它启动了第二种情况,询问用户是否要继续。如果他选择“否”,他可以返回菜单。但按照我的做法,我在盒子里生成了一个 menu.sh 。 更好的解决方案是什么? 预先感谢您的帮助

最佳答案

正如您的代码所示,您无需运行任何内容即可返回菜单。只需删除生成 menu.sh 的行即可。

示例 function1 如下所示:

function1() {
read -p "do you want to continue [y/n] ?" choice
       case $choice in
       y|Y)
            # DO SOME STUFF and go back to menu
            echo "hello"
       ;;   
       n|N )

       ;;
       *) 
            echo "invalid input"
       ;;
       esac
}

然后改变

while read answer;do

while read -p "Enter a number: " answer;do

这将使您更容易理解事情是如何运作的。

关于 bash : got to the upper imbricated case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157589/

相关文章:

node.js - 冲泡安装 npm "npm: command not found"

javascript - 使用javascript将类添加到两级导航

recursion - erlang 如何处理混合尾递归的 case 语句

linux - 运行 sh 脚本以从 crontab 以 root 身份停止并重新启动 nginx?

在 Linux 上找不到 Java 命令

javascript - “菜单触发”脚本在 IE11 中不起作用

css - 悬停在菜单上时为子菜单添加悬停效果

mysql - TRIGGER 中的 SELECT CASE 语句

mysql - 计算一个案例或如果为空

linux - 将 while 循环传递给超时