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

Shell脚本Yes/No循环交互功能实现求助(脚本新手)

帮你修复Yes/No询问的Shell脚本

嘿,别担心!作为Shell脚本新手,语法细节确实容易搞混,我帮你把这个脚本理顺,先说说你原来代码里的问题,再给你正确的实现~

你原代码里的主要问题

  • read命令没有把用户输入存储到变量里,应该写成 read -p "问题内容" 变量名,你漏了给RESP变量赋值
  • if语句语法错误:条件判断需要用$取变量值(比如"$RESP"而不是"RESP"),而且if/else的结构完全混乱,没有正确的闭合和逻辑分支
  • 循环部分逻辑错误:变量初始化、递增方式(Shell里不能直接count++,要写成count=$((count + 1)))和循环条件都不对
  • 字符串比较时没有考虑大小写问题,用户输入Yes/YES会匹配失败

正确的脚本实现

这个脚本会完美实现你的需求:第一次询问,回答Yes就输出回复;回答No就重复询问4次(加上第一次总共5次),输入无效会提示重新回答:

# 初始化计数器和最大尝试次数(包括第一次,总共5次)
count=0
max_tries=5

while [ $count -lt $max_tries ]; do
    # 询问用户并存储输入到RESP变量
    read -p "Would you like a cup of tea? (Yes/No) " RESP
    
    # 把输入转成小写,兼容大小写输入(Yes/YES/yes都能匹配)
    RESP=$(echo "$RESP" | tr '[:upper:]' '[:lower:]')
    
    if [ "$RESP" = "yes" ]; then
        echo "Great! I will make you a cup of tea!"
        exit 0  # 回答Yes后直接退出脚本
    elif [ "$RESP" = "no" ]; then
        # 如果不是最后一次询问,提示确认
        if [ $count -lt $((max_tries - 1)) ]; then
            echo "Are you sure you won't have a cup of tea?"
        fi
        count=$((count + 1))  # 计数器加1
    else
        # 输入无效时提示,不增加计数器
        echo "Oops, please answer with Yes or No!"
    fi
done

# 如果5次都回答No,输出最终提示
echo "Alright, no tea for you then!"

脚本逐行解释

  1. 计数器初始化:count=0记录当前询问次数,max_tries=5设置总共询问5次(第一次+4次重复)
  2. 循环控制:while [ $count -lt $max_tries ]确保只要没到最大次数就继续询问
  3. 读取用户输入:read -p "..." RESP把用户的回答存在RESP变量里
  4. 大小写兼容:用tr命令把输入转成小写,避免因为大小写导致匹配失败
  5. Yes分支:匹配到yes就输出回复,用exit 0退出脚本,不再继续询问
  6. No分支:如果是最后一次询问就不提示确认,否则提示,然后计数器加1
  7. 无效输入分支:提示用户输入正确选项,不增加计数器,重新询问
  8. 循环结束:如果5次都回答No,输出最终的提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:00