【问题标题】:Multiple read commands and check for input of each多个读取命令并检查每个命令的输入
【发布时间】:2014-11-25 03:11:40
【问题描述】:

我想要求用户输入多个问题,然后将输入存储在变量中,但还要确保为每个问题输入的输入不为空,否则会重复问题

目前为止

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

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

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

    【讨论】:

    • 您也可以使用[[ $NAME ]],因为您已经将bash-p 选项设置为read
    • 非常感谢您的建议,直到,我会阅读更多关于命令的内容。
    【解决方案2】:

    我正在使用 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

    【讨论】:

    • 有一些方法可以不使用eval
    • 绝对没有两次使用eval
    猜你喜欢
    • 2014-09-22
    • 2014-07-09
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多