多个读取命令并检查每个输入的输入

问题描述:

我想要求用户输入多个问题,然后将输入存储在变量中,但也要确保为每个问题输入的输入不是空的,否则它会重复问题多个读取命令并检查每个输入的输入

到目前为止,我有

input() { 
     if [ ! -z "$db*" ]; then 
       echo "Nothing entered" >&2; 
       return 
     else 
       break 
     fi 
} 

read -ep 'Enter your name >> [y/N]: ' name && 
input 
read -ep 'Enter your email >> [y/N]: ' email && 
input 
read -ep 'Enter your password >> [y/N]: ' password 
input 

使用的until语句,并检查非空与[

until [ "$NAME" ]; do 
    printf "Name: " 
    read NAME 
done 

[ "$VAR" ]建设test命令允许你测试变量是否非空1

+1

你也可以使用'[[$ NAME]]',因为你已经假设'bash'带有'-p'选项来'read'。 – chepner 2014-11-24 18:33:07

+0

好点。更好地使它更便携。 – Ray 2014-11-24 18:44:53

+0

非常感谢您的建议,直到我将阅读更多的命令。 – programiss 2014-11-24 19:36:09

我使用的readeval和下列组合,其中调用所述输入功能具有可变保存在输入和消息要被打印(input_not_empty "INPUTVAR" "message"

input() 
{ 
    local foo 
    echo -n "$2: " 
    read foo 
    eval "$1=\"$foo\"" 
} 

input_not_empty() 
{ 
    input $1 "$2" 
    if [ -z "$(eval echo \$$1)" ]; then 
     echo "ERROR: input empty..." 
     exit 1 
    fi 
} 

input_not_empty NAME "your full name" 
input_not_empty EMAIL "your full email" 

echo "name is $NAME" 
echo "email is $EMAIL 

但请注意eval

+0

有些方法可以在不使用'eval'的情况下做到这一点。 – chepner 2014-11-24 18:36:46

+0

绝对没有* eval的两个*用途。 – 2014-11-24 19:04:13