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

时间:2014-11-24 17:57:45

标签: bash

我想询问多个问题的用户输入,然后将输入存储在变量中,同时确保为每个问题输入的输入不为空,否则重复问题

到目前为止我已经

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

2 个答案:

答案 0 :(得分:2)

使用until语句并使用[检查非空:

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

[ "$VAR" ]命令的test构造允许您测试变量是否为非空1

答案 1 :(得分:0)

我正在使用readeval的以下组合,您可以使用变量调用输入函数以保存输入并使用要打印的消息(input_not_empty "INPUTVAR" "message")< / p>

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