BASH:得到了上层瓦解的案例

时间:2016-05-11 08:54:32

标签: bash menu case

这是我的第一个问题,所以我希望我足够清楚 在箱子里面有一个箱子有以下问题。 第一个是触发功能的菜单。在函数内部有另一个案例。如果用户选择NO,他应该回到第一种情况。 除了启动第一个脚本(包含第一个案例:

)之外,我还没有找到如何做到这一点

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。 什么是更好的解决方案? 提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

当您的代码布局时,您无需运行任何内容即可返回菜单。只需删除您在其中生成 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

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