Shell脚本中如何判断数字是否在指定范围并实现循环验证
修复你的数字验证脚本
我来帮你排查下脚本里的问题,然后给出能正常运行的版本:
原脚本的几个问题:
- 逻辑运算符使用错误:在
[ ]中不能直接用&&,得用-a表示“与”;另外你写的-ls是拼写错误,应该是-lt(代表“小于”)。 - 缺少循环结构:你的脚本只验证一次输入,不符合“重复提示直到正确”的需求,需要用
while循环包裹验证逻辑。 break语句无效:因为没有循环,break根本起不到终止重复的作用。
修正后的脚本:
validate_number() { # 用while循环持续提示直到输入合法 while true; do read -p "Insert number: " number # 用[[ ]]可以直接用&&,语法更直观 if [[ $number -ge 2 && $number -lt 5 ]]; then echo "Valid number!" break # 输入正确,退出循环 else echo "Not a valid number, try again (must be between 2 and 4 inclusive)!" fi done } # 调用验证函数 validate_number # 输出最终合法的数字 echo "Your number is: $number"
关键改进点:
- 用
while true创建一个无限循环,直到输入符合条件才通过break退出。 - 改用
[[ ]]进行条件判断,支持直接使用&&,比[ ]的语法更灵活易读。 - 把
read和提示信息合并成read -p,更简洁。 - 明确提示用户输入的范围(2到4之间,因为
-lt 5意味着小于5,所以最大是4)。
你可以直接运行这个脚本试试,它会一直提示你输入,直到你输入2、3、4中的一个为止。
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

