用户输入验证(while loop)非数字输入了所请求的数字(bash)



我正在尝试完成以下说明中列出的任务,但不确定如何在确保他们不输入字母,定界符或空白时验证用户的响应空间为他们的用户_number。当前,当我运行脚本时,它指出" ./loop_test.sh:第12行:[:a:Integer Expression预期"。我从YouTube,教科书和这里到处看,但似乎无法弄清楚什么是错的...有人可以帮我吗?

#!/bin/bash
# Description: This script will ask the user to enter a number between 20
# and 30. If the user enters an invalid number or a non-number, it will ask
# again. The process will repeat until a satisfactory number is entered.
# Option: None
printf "Hello! Select a number between 20-30: "
read user_number
while [ "$user_number" -lt 20 ] || [ "$user_number" -gt 30 ] && [ 
"$user_number" -ne *[0-9]* ]
do
    printf "Sorry, it looks like the input you selected isn't between 20-30n"
    printf "Please select another number: "
    read user_number
done
printf "All set! Thanks for following directions!n"

如果您使用的是bash,则可以使用更高级的比较,例如图案:

while [[ $user_number != +([0-9]) || ...

第一个条件表示用户输入不包含一个或多个数字

最新更新