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
,只需执行退出
。仅供参考:您缺少;
之前的;
)谢谢您的回答。是我这边的一个小问题