我有这个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")