一行读取验证

一行读取验证

我有这个read操作:

read -p "Please enter your name:" username

如何在一行中验证用户名?

如果在一行中不可能以一种合理的方式,也许将 Bash 函数放入变量中是一个不错的解决方案?


名称只是一个示例,它可以是密码或任何其他常见的形式值。

验证在这里的意思是:要求用户输入两次名称并确保两个值相同。

答案1

用户键入(或者可能复制并粘贴...)相同的内容两次通常是通过两次read调用、两个变量和一次比较来完成的。

read -p "Please enter foo" bar1
read -p "Please enter foo again" bar2
if [ "$bar1" != "$bar2" ]; then
   echo >&2 "foos did not match"
   exit 1
fi

这可以通过while循环和条件变量来完成,重复提示和检查直到匹配为止,或者如果将有很多输入提示,则可以将其抽象为函数调用。

答案2

要扩展 thrig 的答案并包含您请求的功能:

功能

enter_thing () {
    unset matched
    while [[ -z "$matched" ]]; do
        read -rp "Please enter $@: " thing1
        read -rp "Please re-enter $@: " thing2
        if [[ "$thing1" == "$thing2" ]]; then
            matched=1
        else
            echo "Error! Input does not match" >&2
        fi
    done
    echo "$thing2"
}

在脚本中,您可以这样称呼它:

username=$(enter_thing "name")
email=$(enter_thing "email")
password=$(enter_thing "password")

相关内容