ubuntu select控制语句不退出
解决方法:
如果用户想跳出选择循环,需要在循环体中根据条件在每个分支后增加break语句。
1.用 case 判断:
用字符串选择分支:
msg_info "请选择 dev 更新到哪个 Release 分支,数字(其他数字手动输入): " select mode in "code" "go" "java" do case ${mode} in "code") # msg_ok "选择了: ${mode}" rel="code" break ## 不写 break ,选择后不会退出 ;; "go") # msg_ok "选择了: ${mode}" rel="go" break ## 不写 break ,选择后不会退出 ;; "java") # msg_ok "选择了: ${mode}" rel="java" break ## 不写 break ,选择后不会退出 ;; *) ## 让用户自己输入值 read -p "请输入 dev 更新到哪个 Release 分支: " rel ;; esac done ## select END
用数字选择分支:
msg_info "请选择 dev 更新到哪个 Release 分支,数字(其他数字手动输入): " select mode in "code" "go" "java" do case ${REPLY} in 1) # msg_ok "选择了: ${mode}" rel="code" break ## 不写 break ,选择后不会退出 ;; 2) # msg_ok "选择了: ${mode}" rel="go" break ## 不写 break ,选择后不会退出 ;; 3) # msg_ok "选择了: ${mode}" rel="java" break ## 不写 break ,选择后不会退出 ;; *) ## 让用户自己输入值 read -p "请输入 dev 更新到哪个 Release 分支: " rel break ## 不写 break ,选择后不会退出 ;; esac done ## select END
REPLY:是获取 select 循环对应的数字序号的环境变量(用户输入被保存在内置变量REPLY 中)。
2.用 if 语句判断选择:
msg_info "请选择 dev 更新到哪个 Release 分支,数字(其他数字手动输入): " select mode in "code" "go" "java" do if [ "code" = "${mode}" ]; then msg_ok "选择了: ${mode}" rel="code" break ## 不写 break ,选择后不会退出 elif [ "go" = "${mode}" ]; then msg_ok "选择了: ${mode}" rel="go" elif [ "java" = "${mode}" ]; then msg_ok "选择了: ${mode}" rel="java" else ## 让用户自己输入值 read -p "请输入 dev 更新到哪个 Release 分支: " rel break ## 不写 break ,选择后不会退出 fi done ## select END
3.让用户直接输入(省去用 read)
PS3="请选择语言,输入数字(可以直接输入语言): " select mode in "python" "go" "java" do case ${mode} in "python") echo "选择了: ${mode}" rel="python" break ;; "go") echo "选择了: ${mode}" rel="go" break ;; "java") echo "选择了: ${mode}" rel="java" break ;; *) ## 让用户自己输入值 rel="${REPLY}" ;; esac done ## select END echo "rel=${rel}"
当列表中没有用户想要的内容,可以直接把系统内置变量${REPLY}的值作为用户自定义的内容,省去调用 read 再次读取。
REPLY:用户输入被保存在内置变量REPLY 中。
PS3:自定义系统提示,默认是#?
break: case 选择分支里,不写 break ,选择后不会退出
扩展:
显示彩色提示:https://www.cnblogs.com/wutou/p/17600374.html
参考:
《跟老男孩学Linux运维》P242
https://www.jb51.net/article/70314.htm
http://m.biancheng.net/view/2829.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!