【发布时间】:2011-10-19 06:15:28
【问题描述】:
如何编写检查环境变量并在未设置变量时写入日志文件的 shell 脚本?
【问题讨论】:
-
我可以从脚本内部回显 $var。要么我检查返回字符串是否为空等。这看起来非常麻烦和hacky..
-
也在unix&linux中提问
标签: linux bash shell unix scripting
如何编写检查环境变量并在未设置变量时写入日志文件的 shell 脚本?
【问题讨论】:
标签: linux bash shell unix scripting
如果您只想要未设置的消息,那么:
if [ -z "${CHOSEN_ENV_VAR}" ]
then echo "CHOSEN_ENV_VAR was not set but should have been" >> log.file
fi
如果您只是希望脚本停止并报告 stderr,那么:
: ${CHOSEN_ENV_VAR:?'was not set but should have been'}
(您可以在交互式shell中测试,但交互式shell不会退出。把它放在脚本中,脚本就会退出。)
【讨论】:
:,因为:? 不仅指未设置的变量,而且还检查 NULL 变量。仅在未设置时省略冒号测试。 (与您的第一个示例相同的问题,只是检查空虚,而不是未设置)
[ -n "${CHOSEN_ENV_VAR+X}" ] 来检测未设置的环境变量。如果未设置 CHOSEN_ENV_VAR,则表示法会生成 X。
写入日志的命令是logger。
然后你测试一个变量是否设置了test -v,所以在你的脚本中你必须有这些行:
if test ! -v VARNAME; then logger Variable VARNAME is unset; fi
编辑:如果您的意思是日志只是一个任意日志文件而不是系统日志,您当然可以用 echo bla bla > log.file 替换记录器。
【讨论】:
[ -z "$name" ] 检查name 是否为空。要测试它是否未设置,请使用[ -z "${name+isset}" ]。
check() {
if [ -z "${name+isset}" ]; then
echo "name is unset"
elif [ -z "$name" ]; then
echo "name is empty"
else
echo "name is non-empty"
fi
}
name=me; check name
name=; check name
unset name; check name
【讨论】: