Bash 巴什:到了上覆瓦的情况

Bash 巴什:到了上覆瓦的情况,bash,menu,case,Bash,Menu,Case,这是我的第一个问题,所以我希望我足够清楚 我在一个箱子里有以下问题。 第一个是触发函数的菜单。在函数内部还有一个其他情况。如果用户选择“否”,则应返回到第一个案例。 除了启动第一个脚本(包含第一个案例: 菜单.sh: source ./functions.sh #read answer while read answer;do case $answer in 1) function1 ;; 2) function2

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

菜单.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
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


}
functions.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
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


使用函数或循环,而不是再次调用脚本。或者让第二个脚本结束,然后返回到第一个脚本,您就不需要再次调用它了。在插入
/menu.sh
,只需执行
退出
。仅供参考:您缺少
之前的
)谢谢您的回答。是我这边的一个小问题