【问题标题】:Validating Variables in Shell Script在 Shell 脚本中验证变量
【发布时间】:2009-09-09 09:00:55
【问题描述】:

确保已设置脚本所需的所有环境变量的最佳方法是什么? 目前,我有多个不是很整洁的 if 语句:

if [ -z "$VAR1" ]
then
    echo VAR1 not set
    exit
fi

if [ -z "$VAR2" ]
then
    echo VAR2 not set
    exit
fi

if [ -z "$VAR3" ]
then
    echo VAR3 not set
    exit
fi

有没有更好的办法?

【问题讨论】:

    标签: unix shell scripting


    【解决方案1】:

    你可以使用间接:

    vars="FOO BAR"
    for var in $vars
    do
        [[ -z ${!var} ]] && 
            echo "Variable ${var} is empty" ||
            echo "The value of variable ${var} is ${!var}"
    done
    

    【讨论】:

    • 正是我的意思!太棒了!!+1
    • 请注意,这测试是否为空,而不是是否设置
    【解决方案2】:

    在(你想要的一组变量)中使用 for 循环。不行吗?

    【讨论】:

    • 谢谢!我以后不会建议这个。我也不确定。刚问:)
    • 请编辑您的答案,我误解了它并错误地投了反对票。编辑以使我删除我的投票
    • 我也会为此使用 for 循环,有助于减少重复。
    • 已编辑.. :).. 谢谢安德烈!! :)
    【解决方案3】:

    我的 shell 库中有这个函数:

    # Check that a list of variables are set to non-null values.
    # $@: list of names of environment variables. These cannot be variables local
    #     to the calling function, because this function cannot see them.
    # Returns true if all the variables are non-null, false if any are null or unset
    varsSet()
    {
            local var
            for var ; do
                    eval "[ -n \"\$$var\" ] || return 1"
            done
    }
    

    我在这样的代码中使用它:

    varsSet VAR1 VAR2 VAR3 || <error handling here>
    

    【讨论】:

      【解决方案4】:

      你可以把它们做空很多:

      [ -z "$FOO" ] && echo "FOO is empty"
      [ -z "$BAR" ] && echo "BAR is empty"
      

      更好的方法:

      ${FOO:?"FOO is null or not set"}
      ${BAR:?"BAR is null or not set"}
      

      当然,如果您要测试的变量数量不低,按照@Aviator 的建议循环可能有助于避免重复代码。

      根据@Aviator 的回答,我建议定义一个注释良好的变量,其中包含要测试的变量列表。这样你就不会让你的代码变得神秘了。

      TEST_FOR_IS_SET="FOO BAR BAZ"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-31
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2011-06-07
        • 1970-01-01
        相关资源
        最近更新 更多