user9303970 Asked: 2018-02-05 18:29:51 +0800 CST2018-02-05 18:29:51 +0800 CST 2018-02-05 18:29:51 +0800 CST 一行读取验证[关闭] 772 我有这个read操作: read -p "Please enter your name:" username 如何在一行中验证用户名? 如果不可能在一行中以理智的方式进行,也许将 Bash 函数放在变量中是一个不错的解决方案? 名称只是一个例子,它可以是密码或任何其他常见的形式值。 这里的验证是指:请求用户两次插入名称并确保两次值相同。 variable read 2 个回答 Voted Best Answer thrig 2018-02-05T18:46:49+08:002018-02-05T18:46:49+08:00 用户输入(或者,可能是复制和粘贴……)同一件事两次通常是通过两次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循环和条件变量重复提示和检查直到匹配,或者如果将有大量输入提示,则可能抽象为函数调用。 jesse_b 2018-02-05T19:01:11+08:002018-02-05T19:01:11+08:00 要扩展 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")
用户输入(或者,可能是复制和粘贴……)同一件事两次通常是通过两次
read
调用、两个变量和一次比较来完成的。这可以通过循环和条件变量来完成,该
while
循环和条件变量重复提示和检查直到匹配,或者如果将有大量输入提示,则可能抽象为函数调用。要扩展 thrig 的答案并包括您所请求的功能:
功能
在脚本中,您可以这样称呼它: