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
相关产品推荐
相关产品推荐

