You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:57:01