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

Bash脚本while循环验证问题:数字范围校验失效求助

问题分析与解决思路

你的脚本核心问题出在循环条件的逻辑判断错误,导致验证完全失效,具体问题和修正方案如下:

1. 无效范围的判断逻辑错误

原脚本第一个while循环的条件:

while (($User_Number <= 0 && $User_Number >= 11)) 

一个数字不可能同时满足“≤0”和“≥11”,这个条件永远为假,所以循环根本不会触发,任何输入都会直接跳过验证。

修正:应该用逻辑或||,表示“小于1 或者 大于10”的无效情况:

while (( User_Number < 1 || User_Number > 10 ))

2. 有效范围的循环完全多余且写法错误

原脚本第二个while循环的条件:

while ((1 >= $User_Number <= 10)) 

Bash不支持这种链式比较写法,而且第一个循环已经确保输入有效了,完全不需要再套一个循环来输出结果,直接去掉这个循环,把输出代码放在验证通过后即可。

3. 多余的continue语句

原第一个循环里的continue会直接跳过后续的echo语句,而且验证循环本身不需要continue,读取新输入后会自动进入下一次循环判断。

修正后的完整脚本

#!/bin/bash

Name=""
User_Number="0"

read -rp "What is your name? " Name
read -rp "Enter a number between 1-10. " User_Number

# 验证输入是否在有效范围,无效则重复提示
while (( User_Number < 1 || User_Number > 10 )) 
do
    echo "The number you entered is invalid. Please try again." 
    read -rp "Enter a number between 1-10. " User_Number
done

# 验证通过后输出结果
echo -e "\nHello ${Name}!"
echo "The number you entered is: ${User_Number}"

额外优化建议

  • 可以增加非数字输入的判断,比如如果用户输入的不是数字,((...))会报错,你可以用if ! [[ $User_Number =~ ^[0-9]+$ ]]来先判断是否为整数,再验证范围。
  • 变量引用在((...))里可以不用加$,Bash会自动识别为变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:34:58