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

Shell脚本中如何正确退出while true循环执行后续代码

问题原因

你的代码存在两个核心错误,导致输入Y后无法继续执行后续逻辑:

  1. while true是无条件死循环,Y/y匹配分支执行完提示输出后,没有添加跳出循环的指令,执行完分支逻辑会自动回到循环开头重新触发提问
  2. 非法输入分支错误写了退出逻辑,和「非法内容重新提示」的需求完全相反;另外Y/y分支末尾多写了一个分号属于笔误,虽然不影响核心运行,但不符合case语法规范
修复后可直接运行的代码
while true; do 
    read -p "Do you want to run the script now? (Y/N) " yn
    case $yn in
        [Yy]* ) 
            echo "Permission granted, running commands..."
            break
            ;;
        [Nn]* ) 
            echo "Operation aborted, exiting..."
            exit 0
            ;;
        * ) 
            echo "Incorrect input, please enter Y/y for confirm or N/n for cancel."
            ;;
    esac
done

# 此处开始写后续需要执行的业务代码
echo "Running main script logic..."
关键修改点
  • 在Y/y确认分支末尾添加break关键字:匹配到用户确认输入后,执行完提示会直接跳出当前while死循环,继续执行循环下方的业务代码
  • 修正非法输入分支逻辑:删除原分支里错误的退出指令,仅输出输入错误提示,不做跳出/退出操作,循环会自动回到read提问步骤等待用户重新输入
  • 修正语法笔误:删除Y/y分支末尾多余的分号,所有case分支统一使用标准的双分号;;作为分支结束标记
  • 给N/n取消分支补充明确的正常退出码0,符合Shell脚本运行规范

内容的提问来源于stack exchange,提问作者Mephres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:36:23