【发布时间】:2015-09-22 12:10:25
【问题描述】:
我构建了一个脚本,您可以在其中设置特定文件中的变量。
现在我想编写脚本检查文件中的所有变量是否不为空/未设置。
这是一个示例文件:
#variables.tmp
export foo=1
export bar=
这是我的代码,我试图找出它是否全部设置:
#!/bin/bash
PATHTOVARIABLES=/usr/local
#read variables
source $PATHTOVARIABLES/variables.tmp
#seperate comments from variables in file export.tmp
cat $PATHTOVARIABLES/variables.tmp | grep export > $PATHTOVARIABLES/export.tmp
#get variables in form "${var}"
sed -i "s/export /\"\$\{/g" $PATHTOVARIABLES/export.tmp
sed -i "s/=.*/\}\"/g" $PATHTOVARIABLES/export.tmp
#for-loop to read in variables
for i in `cat $PATHTOVARIABLES/export.tmp`
do
#check if variables are set or not
if [ -z $i ]; then
echo "Variable " $i " set"
else
echo " Variable not set"
fi
done
rm $PATHTOVARIABLES/export.tmp
作为回报,无论变量是否设置,我都会得到“未设置变量”...
我使用了在那里找到的if 条件:https://serverfault.com/questions/7503/how-to-determine-if-a-bash-variable-is-empty
您能解释一下我的代码有什么问题吗?我是 bash 脚本的新手,所以请耐心等待 ;-)
【问题讨论】:
-
它不工作吗?什么不工作?通过shellcheck.net 运行您的代码并修复它列出的问题(请参阅Bash FAQ 001 以替换您的 for 循环)。
-
您是否仔细检查过任何个中间结果?在您的
sed之后的export.tmp中有什么?i包含什么? 为什么每个愿意帮助你的人都必须单独解决这个问题? -
您是否正在使用对
/usr/local具有写入 访问权限的用户测试 脚本?真的吗? -
你使用的是什么版本的
bash? -
我想要的是
if [ -z "${foo}" ]; then。我认为这是可行的,因为i包含字符串"${foo}"。我会试试 DevSolar 解决方案