有以下 shell,它在 (while true) 循环内有一个 (while true) 循环。我正在尝试使用“中断”来中断内部循环,但事实并非如此。
我想打破内循环并向用户显示第一个循环的选项;建议请。
#!/bin/ksh
sub_menu() {
echo "~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " S U B - M E N U "
echo "~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "1. Display properties"
echo "2. Back"
}
read_sub_options(){
echo "Please select option"
read option
case $option in
1) sub_menu ;;
***2) break ;;***
*) echo "Please insert options 1 ~ 2";;
esac
}
showSubMenu(){
while true
do
sub_menu
read_sub_options
done
}
read_options(){
echo "Please select option "
read option
case $option in
1) showSubMenu ;;
2) exit 0;;
*) echo "Please insert options ";;
esac
}
show_menus() {
echo "~~~~~~~~~~~~~~~~~~~~~"
echo " M A I N - M E N U "
echo "~~~~~~~~~~~~~~~~~~~~~"
echo "1. Sub Menu"
echo "2. Exit"
}
# -----------------------------------
# MAIN
# ------------------------------------
while true
do
show_menus
read_options
done
这是输出:
~~~~~~~~~~~~~~~~~~~~~
M A I N - M E N U
~~~~~~~~~~~~~~~~~~~~~
1. Sub Menu
2. Exit
Please select option
1
~~~~~~~~~~~~~~~~~~~~~~~~~
S U B - M E N U
~~~~~~~~~~~~~~~~~~~~~~~~~
1. Display properties
2. Back
Please select option
2
~~~~~~~~~~~~~~~~~~~~~~~~~
S U B - M E N U
~~~~~~~~~~~~~~~~~~~~~~~~~
1. Display properties
2. Back
Please select option
2
最佳答案
以下脚本在这里工作。
所做的更改有 read_sub_options
返回 2 如果 sub_menu
被调用并在选择 Back 选项时返回 1,然后在 showSubMenu 中检查上次运行命令的返回值,如果选择 Back 则中断。
见 KSH script basics和 Learning the Korn shell获取更多 KSH 脚本引用信息。
见 select以及 ksh 手册页,了解有关您问题的评论中提到的另一种菜单选择方法的信息。
#!/bin/ksh
sub_menu() {
echo "~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " S U B - M E N U "
echo "~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "1. Display properties"
echo "2. Back"
return 2;
}
read_sub_options(){
echo "Please select option"
read option
case $option in
1) sub_menu ;;
2) return 1;;
*) echo "Please insert options 1 ~ 2";;
esac
}
showSubMenu(){
while true
do
sub_menu
read_sub_options
if [[ $? == 1 ]] ; then
break
fi
done
}
read_options(){
echo "Please select option "
read option
case $option in
1) showSubMenu;;
2) exit 0;;
*) echo "Please insert options ";;
esac
}
show_menus() {
echo "~~~~~~~~~~~~~~~~~~~~~"
echo " M A I N - M E N U "
echo "~~~~~~~~~~~~~~~~~~~~~"
echo "1. Sub Menu"
echo "2. Exit"
}
# -----------------------------------
# MAIN
# ------------------------------------
while true
do
show_menus
read_options
done
关于Shell 中断 while-true 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625532/