Linux 如果环境变量未设置,如何记录?

Linux 如果环境变量未设置,如何记录?,linux,bash,shell,unix,scripting,Linux,Bash,Shell,Unix,Scripting,如何编写shell脚本来检查环境变量并在变量未设置时写入日志文件?写入日志的命令是logger。 您可以测试变量是否设置了test-v,因此在脚本中必须有以下行: if test ! -v VARNAME; then logger Variable VARNAME is unset; fi 编辑:如果您指的是日志只是一个任意的日志文件,而不是系统日志,那么您当然可以用echo bla bla>log.file替换日志记录程序。如果您只想在消息未设置时收到它,那么: if [ -z "${CHO

如何编写shell脚本来检查环境变量并在变量未设置时写入日志文件?

写入日志的命令是
logger
。 您可以测试变量是否设置了
test-v
,因此在脚本中必须有以下行:

if test ! -v VARNAME; then logger Variable VARNAME is unset; fi

编辑:如果您指的是日志只是一个任意的日志文件,而不是系统日志,那么您当然可以用echo bla bla>log.file替换日志记录程序。

如果您只想在消息未设置时收到它,那么:

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不会退出。将其放入脚本中,脚本就会退出。)

[-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

我能够从脚本内部回显$var。要么我检查返回字符串是否为空,等等。。这看起来很麻烦,也很粗糙。我想他应该在你的第二个例子中省略(第二个)
,因为
:?
不仅指未设置的变量,而且还检查空变量。省略冒号测试仅用于未设置。(与您的第一个示例相同的问题,只是检查是否为空,而不是未设置)是的-我很少需要设置,但需要空的环境变量;它通常表示存在问题。您还可以使用
[-n“${selected_ENV_VAR+X}”
来检测未设置的环境变量。如果未设置Selected_ENV_VAR,则表示法将生成一个X。