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

如何检查bash中是否定义了多个变量,bash,shell,Bash,Shell,我想检查是否设置了多个变量,如果设置了,那么只执行脚本代码,否则退出 比如: if [ ! $DB=="" && $HOST=="" && $DATE=="" ]; then echo "you did not set any variable" exit 1; else echo "You are good to go" fi 您可以使用-z测试变量是未设置的还是空的: if [[ -z $DB || -z $HOST || -z

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

比如:

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

您可以使用
-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"
由于您使用了标记,我使用了扩展测试
[[
,这意味着我不需要在变量周围使用引号。我假设您需要定义所有三个变量才能继续。如果
if
分支中的
退出
,则意味着
else
是多余的

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

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

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

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

DB=myDB
HOST=myDB
DATE=myDATE
然后,如果当前
为空
未设置

#!/bin/bash
while read -r line; do
    var=`echo $line | cut -d '=' -f1`
    test=$(echo $var)
    if [ -z "$(test)" ]; then 
        echo 'one or more variables are undefined'
        exit 1
    fi
done <var.txt
echo "You are good to go"
!/bin/bash
当读取-r行时;执行
var=`echo$line | cut-d'='-f1`
测试=$(echo$var)
如果[-z“$(测试)”],则
echo“一个或多个变量未定义”
出口1
fi

完成如果您同意为此编写函数,那么它会非常方便

此解决方案使用
${!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" 

for check变量has value or not[-z$a-a-z$b-a-z$c]&&echo“has not value”| | echo“ok good to go!”谢谢!我想您也可以使用
-o
将测试组合到一个谓词中,而不是使用| |和三个单独的
[/code>调用?@BeeOnRope。建议使用(参见应用程序使用部分),尤其是在处理可能由用户定义的变量时。感谢您提到“引号”的区别。我甚至没有在代码中看到这种区别:(