在Shell脚本中验证变量

时间:2009-09-09 09:00:55

标签: unix shell scripting

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

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

有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

您可以使用间接:

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循环(你想要的变量集)。那不行吗?

答案 2 :(得分:1)

你可以将它们缩短很多:

[ -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"

答案 3 :(得分:1)

我的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>