Shell脚本中如何正确退出while true循环执行后续代码
问题原因
你的代码存在两个核心错误,导致输入Y后无法继续执行后续逻辑:
while true是无条件死循环,Y/y匹配分支执行完提示输出后,没有添加跳出循环的指令,执行完分支逻辑会自动回到循环开头重新触发提问- 非法输入分支错误写了退出逻辑,和「非法内容重新提示」的需求完全相反;另外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
相关产品推荐
相关产品推荐

