解决方法:
如果用户想跳出选择循环,需要在循环体中根据条件在每个分支后增加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 循环对应的数字序号的环境变量。
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
参考:
《跟老男孩学Linux运维》P242
https://www.jb51.net/article/70314.htm