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

为Bash猜数字游戏脚本添加错误检查的技术求助

Bash猜数字脚本输入校验修复方案

问题分析

你使用的if [ ! -z "${number_guess##*[!0-9]*}" ]; then校验逻辑本身没问题,但之前的放置位置和嵌套逻辑错误,导致无论输入是否合法都会触发错误提示。另外原脚本直接用-eq比较非数字输入时会报错,必须先完成输入合法性校验再执行核心猜数逻辑。

修复后的完整脚本

#!/bin/bash

min_number=1
max_number=10

my_number=$[ $RANDOM % ${max_number} + ${min_number} ]

echo -n "Guess a number between ${min_number} and ${max_number}: "
read number_guess

# 先校验输入是否为纯数字,再判断范围
if [ ! -z "${number_guess##*[!0-9]*}" ]; then
    # 确认数字在1-10区间内
    if [ ${number_guess} -ge ${min_number} ] && [ ${number_guess} -le ${max_number} ]; then
        echo "My number is ${my_number}. You guessed ${number_guess}."
        if [ ${number_guess} -eq ${my_number} ]; then
            echo "Congratulations! You guessed correctly!"
        else
            echo "Sorry, better luck next time!"
        fi
    else
        echo "Please enter a valid number"
    fi
else
    echo "Please enter a valid number"
fi

exit 0

关键逻辑说明

  • 纯数字校验:${number_guess##*[!0-9]*}是Bash参数扩展语法,作用是移除输入字符串中所有非数字字符。如果处理后的结果不为空(! -z),说明输入全是数字。
  • 范围校验:用-ge(大于等于)和-le(小于等于)组合判断,确保输入数字落在1-10的指定区间内。
  • 执行顺序:先验证输入是否为纯数字,再检查数字范围,只有双重校验通过后,才会执行原有的猜数结果判断逻辑。

错误原因解释

你之前出现的全域错误提示,大概率是把校验条件写反(比如误写为if [ -z "${number_guess##*[!0-9]*}" ]; then),或者没有正确嵌套范围校验逻辑,导致合法输入也被判定为非法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:37:43