首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >退出bash switch语句

退出bash switch语句
EN

Stack Overflow用户
提问于 2011-08-12 09:44:34
回答 5查看 35.1K关注 0票数 10

我已经编写了一个菜单驱动的bash脚本,它在while循环中使用一个switch case来执行各种菜单选项。一切都运行得很好。现在我试图通过对用户输入执行错误测试来改进程序,但我似乎无法使其工作……

问题是我不知道如何正确地中断switch语句,而不中断while循环(这样用户就可以再试一次)。

代码语言:javascript
复制
# repeat command line indefinitely until user quits
while [ "$done" != "true" ]
do
   # display menu options to user
   echo "Command Menu" # I cut out the menu options for brevity....

   # prompt user to enter command
   echo "Please select a letter:"
   read option

   # switch case for menu commands, accept both upper and lower case
   case "$option" in

   # sample case statement
   a|A) echo "Choose a month"
        read monthVal
        if [ "$monthVal" -lt 13 ]
        then 
           cal "$monthVal"
        else
           break # THIS DOES NOT WORK. BREAKS WHILE LOOP, NOT SWITCH!
        fi
        ;;
   q|Q) done="true" #ends while loop
        ;;
   *)   echo "Invalid option, choose again..."
        ;;
   esac
done
exit 0

当用户输入有效的月份值时,程序运行良好,但如果用户输入的数字大于13,则程序不会中断switch语句并再次重复循环,而是同时中断switch和while循环并停止运行。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-12 17:23:23

将该case的主体移动到一个函数中,您就可以随意地从该函数执行return

代码语言:javascript
复制
do_A_stuff() {
    echo "Choose a month"
    read monthVal
    if [ "$monthVal" -lt 13 ]
    then 
       cal "$monthVal"
    else
       return
    fi
    further tests ...
}

然后

代码语言:javascript
复制
case $whatever in
a|A) do_A_stuff ;;
票数 8
EN

Stack Overflow用户

发布于 2011-08-12 09:48:39

点击;;将终止case语句。试着什么都不做:

代码语言:javascript
复制
a|A) echo "Choose a month"
     read monthVal
     if [ "$monthVal" -lt 13 ]
     then 
        cal "$monthVal"
     fi
     ;;
票数 12
EN

Stack Overflow用户

发布于 2011-08-13 00:42:21

我认为你对break的意思是“退出这个case语句并重新启动while循环”。然而,case ... esac不是一个控制流语句(尽管它可能闻起来像一个),并且没有注意到break

尝试将break更改为continue,这将把控制发回while循环的开头。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7034838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档