如何检查bash中是否定义了多个变量

时间:2015-03-26 12:43:21

标签: bash shell

我想检查一下,如果设置了多个变量,如果设置则只执行脚本代码,否则退出。

类似的东西:

if [ ! $DB=="" && $HOST=="" && $DATE==""  ]; then
  echo "you did not set any variable"
   exit 1;
else
  echo "You are good to go"
fi      

4 个答案:

答案 0 :(得分:42)

您可以使用-z来测试变量是否未设置或为空:

if [[ -z $DB || -z $HOST || -z $DATE ]]; then
  echo 'one or more variables are undefined'
  exit 1
fi

echo "You are good to go"

由于您使用了标记,因此我使用了扩展测试[[,这意味着我不需要在变量周围使用引号。我假设您需要定义所有三个变量才能继续。 exit分支中的if表示else是多余的。

在任何符合POSIX标准的shell中执行此操作的标准方法如下:

if [ -z "$DB" ] || [ -z "$HOST" ] || [ -z "$DATE" ]; then
  echo 'one or more variables are undefined'        
  exit 1
fi

这里的重要区别是每个变量检查​​都在一个单独的测试中进行,并且在每个参数扩展周围使用双引号。

答案 1 :(得分:7)

如果您可以为此目的编写函数,那会非常方便。

此解决方案使用 ${!VAR_NAME} 语法来检查变量是否为空,并具有告诉您哪些变量名称为空的额外好处。

check_vars()
{
    var_names=("$@")
    for var_name in "${var_names[@]}"; do
        [ -z "${!var_name}" ] && echo "$var_name is unset." && var_unset=true
    done
    [ -n "$var_unset" ] && exit 1
    return 0
}

# Usage for this case
check_vars DB HOST DATE
echo "You are good to go" 

答案 2 :(得分:0)

您也可以通过将变量名称放在文件中来进行检查

File

然后测试他们当前是否DB=myDB HOST=myDB DATE=myDATE empty

unset

答案 3 :(得分:0)

我最终使用 variable-variables 遍历了一个易于管理的 HEREDOC 变量名称列表:

# Ensure non-empty values.
# Loop through HEREDOC, test variable-variable isn't blank.
while read var; do
  [ -z "${!var}" ] && { echo "$var is empty or not set. Exiting.."; exit 1; }
done << EOF
KUBE_NAMESPACE
DOCKER_REGISTRY
DOCKER_DEPLOY_USER
DOCKER_DEPLOY_PASSWORD
DOCKER_DEPLOY_EMAIL
EOF