2

我正在编写一些脚本,我需要检查一些环境变量并列出所有缺失的变量。我看到很多帖子会检查一个并退出。

if [ -z "$BLAH" ]; then
    echo "Missing BLAH"
    exit 1
fi

但是,我想打印所有丢失的,然后如果没有设置任何内容则退出。我现在正在做这样的事情,有没有更优雅的方法来做到这一点?

function check_env_vars {
  status=0
  for name in $*; do
    value="${!name}"
    echo "$value"
    if [[ -z "$value" ]]; then
      echo "$name environment variable must not be empty"
      status=1
    fi
  done
  return $status
}

if [[ check_env_vars "BLAH" "BLAH1" "BLAH2" -ne 0 ]]; then
  exit 1
fi

欣赏任何想法或想法。

4

1 回答 1

3

if已经检查了退出状态;这就是它[[ ... ]]首先要做的事情。

if ! check_env_vars "BLAH" "BLAH1" "BLAH2"; then
    exit 1
fi

也就是说,bash已经有用于验证变量是否已设置且非空的语法:

check_vars () {
  for name; do
    : ${!name:?$name must not be empty}
  done
}
于 2018-07-27T16:20:38.333 回答