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"
#!/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"
i=0
while read var; do
[ -z "${!var}" ] && { echo "$var is empty or not set. Exiting.."; let i=i+1; }
done << EOF
KUBE_NAMESPACE
DOCKER_REGISTRY
DOCKER_DEPLOY_USER
DOCKER_DEPLOY_PASSWORD
DOCKER_DEPLOY_EMAIL
EOF
if [ $i -gt 0 ]; then
echo $i
echo "exiting"
exit 1
fi
6条答案
按热度按时间q0qdq0h21#
可以使用
-z
测试变量是未设置还是为空:由于你使用了bash标记,我使用了一个扩展的测试
[[
,这意味着我不需要在变量两边使用引号。我假设你需要定义所有三个变量才能继续。if
分支中的exit
意味着else
是多余的。在任何符合POSIX的shell中执行此操作的标准方法如下所示:
这里的重要区别在于,每个变量检查都在单独的测试中进行,并且每个参数扩展都用双引号括起来。
agyaoht72#
如果您可以为此编写一个函数,那么它会非常方便。
这个解决方案使用
${!VAR_NAME}
语法来检查变量是否为空,并且具有告诉您哪些变量名为空的附加好处。q9rjltbz3#
最后我使用variable-variables循环遍历一个易于管理的HEREDOC变量名列表:
e4eetjau4#
您也可以通过将变量名放入文件中来检查它
然后测试它们当前是否为
empty
或unset
mepcadol5#
来自@joe.still的不错的解决方案!改进之处是在检查完所有变量后退出
5lhxktic6#
大家好。我个人在我的bash脚本中使用过这种方法。在bash 4.4和Ubuntu、openSUSE和ClearLinux中验证过。
罐RHEL|中央操作系统|阿尔马和基于Arch的用户让我知道它对你来说很好用?