Bash中如何处理Yes/No问询参数 实现用户输入yes后重启程序
Bash 脚本 Yes/No 交互重启功能实现
核心实现思路
将你的脚本核心业务逻辑包裹在死循环中,执行完成后弹出确认问询,匹配到用户输入的yes类内容时直接回到循环开头重新执行,匹配到no则跳出循环结束程序。
可直接复用的示例代码
#!/bin/bash # 外层死循环控制程序运行次数 while :; do ############################## # 这里替换为你自己的业务逻辑代码 echo "正在执行业务逻辑..." echo "步骤1:读取配置" echo "步骤2:处理任务" echo "步骤3:输出结果" echo "当前轮次执行完成" ############################## # 交互式问询 read -r -p "是否需要重新运行程序?请输入yes/no:" user_input # 转小写后匹配,兼容大小写、短输入y user_input_lower=${user_input,,} if [[ $user_input_lower == y || $user_input_lower == yes ]]; then # 可选:清空上一轮控制台输出 # clear echo "即将重新启动程序..." # 回到循环开头,重新执行 continue else echo "程序正常退出" # 跳出循环,结束程序 break fi done
关键语法说明
while :; do ... done等价于while true; do ... done,是更简洁的死循环写法read -r -p:-r参数禁用反斜杠转义,避免特殊字符输入出错,-p指定输入前的提示文本${user_input,,}:将输入内容全部转为小写,兼容用户输入Yes、YES、Y等不同大小写格式- 正则匹配扩展:如果需要更宽松的匹配,只要输入以y开头就判定为同意,可以把判断条件改为
if [[ $user_input_lower == y* ]]; then
输入校验优化版本
如果需要对无效输入做拦截,要求用户必须输入yes/no才能继续,可以把问询部分替换为如下代码:
while true; do read -r -p "是否需要重新运行程序?请输入yes/no:" user_input case ${user_input,,} in y|yes) echo "即将重新启动程序..." continue 2 # 跳出当前输入校验循环,回到外层主逻辑循环开头 ;; n|no) echo "程序正常退出" exit 0 ;; *) echo "输入无效,请输入yes或者no" ;; esac done
内容的提问来源于stack exchange,提问作者LLMN
相关产品推荐
相关产品推荐

