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

如何实现shell程序在用户输入非y/Y值时自动退出循环

问题原因

你当前的代码核心问题出在循环判断条件的写法错误,同时有2个容易引发隐患的写法问题:

  • 原循环条件[ $continue = "y" -o "Y" ]的实际逻辑是「$continue等于y,或者字符串"Y"非空」,而固定字符串"Y"永远为真,所以无论你输入什么内容,循环都会一直执行,无法退出
  • continue是shell的内置关键字(用于跳过当前循环的剩余语句直接进入下一轮循环),用作自定义变量名可能触发不可预期的错误
  • 变量引用没有加双引号,当用户输入为空时会触发语法报错

修正后的完整代码

#! /bin/sh
# 初始化循环标记为y
run_flag="y"
# 修正后的循环条件:只有当run_flag是y或者Y时才继续循环
while [ "$run_flag" = "y" -o "$run_flag" = "Y" ]
do
    echo "Please enter a station name to start search"
    read name

    result=`grep -w "^$name" STATIONS.TXT`
    if [ -z "$result" ]; then
        echo "$name was not found in the file"
    else
        echo "$name was found in STATIONS.TXT"
    fi
    echo "Do you want to have another go? (enter y or Y to confirm, other to quit)"
    read input
    run_flag=$input
done
echo "End of the search program."

可选优化

如果后续需要扩展更多大小写兼容的判断,可以把循环条件改成更简洁的写法,直接把输入转成小写再判断:

while [ "$(echo "$run_flag" | tr '[:upper:]' '[:lower:]')" = "y" ]

内容的提问来源于stack exchange,提问作者Ye Yint Hlyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:03