Shell 中断 while-true 循环

标签 shell while-loop

有以下 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 basicsLearning 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/

相关文章:

java - 从文本文件写入时,数组仅将值设置为 "0"

Javascript while 或 for 循环更改字符串直到满足条件

linux - 对两个文件使用 diff 并通过电子邮件发送

linux - 如果在 Linux 中找到匹配的字符串,如何跳过期望工作并继续处理

linux - 如何更改 Rsync 服务器上的文件历史记录

linux - 使用 shell 脚本为每一行添加后缀

java - 如何将嵌套循环插入到2个while循环中

python - 如何使函数从 Python 中的函数外部获取变量?

bash - 如何使用 while 循环检查变量是否为空

java - 循环序列停止