【问题标题】:User Input Validation (While Loop) Non-Number Entered where Number Requested (bash)用户输入验证(循环时)在请求数字的地方输入非数字(bash)
【发布时间】:2017-09-29 23:32:20
【问题描述】:

我正在尝试完成下面描述中列出的任务,但我不确定如何验证用户的响应,以确保他们不输入字母、分隔符或空格作为用户编号。目前,当我运行脚本时,它会声明“./loop_test.sh: line 12: [: a: integer expression expected”。我从 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-30\n"
    printf "Please select another number: "
    read user_number
done

printf "All set! Thanks for following directions!\n"

【问题讨论】:

    标签: bash validation scripting user-input delimiter


    【解决方案1】:

    如果您使用bash,您可以使用更高级的比较,例如一个模式:

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

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

    【讨论】:

    • 您好,我已尝试对您的代码进行一些编辑,但我仍然不明白。我希望您能更好地向我解释如何做到这一点,以便当提示用户输入 user_number 并输入字母或十进制数字时,系统会要求他们输入另一个数字。
    • 我展示的条件只是检查 $user_number 是否仅由数字组成。在它之后添加范围检查,即
    • while [[ $user_number != +([0-9]) ]] || (( user_number < 20 || user_number > 30 )) ; do read user_number; done
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多