簡體   English   中英

如何使用 Bash 遍歷數組以檢查列表環境變量?

[英]How to iterate over array to check list environment variables using Bash?

我有一個 bash 腳本,它運行檢查以確定在執行其邏輯之前是否設置了必要的環境變量。

目前,我正在為每個環境變量重復以下代碼塊:

if [[ -z "$SOME_ENV_VAR" ]]; then
    echo "Warning - the SOME_ENV_VAR environment variable isn't set"

    exit 1
fi

有沒有辦法聲明一個數組並遍歷數組並檢查是否設置了環境變量?

我知道如何在 bash 中迭代 arrays,但我不確定如何使用每個迭代變量來檢查是否存在類似命名的環境變量。

如果該名稱存儲在另一個變量中,您可以使用間接方式通過變量名稱訪問該變量。 一個小例子:

x=1
name=x
echo "${!name}" # prints 1

使用這種方法,您只需遍歷要檢查的變量的名稱:

for name in FIRST_ENV_VAR SECOND_ENV_VAR ...; do
    if [[ -z "${!name}" ]]; then
        echo "Variable $name not set!"
        exit 1
    fi
done

您可能還想使用-z "${!name+x}"來接受設置為空字符串的變量,請參見此處

x=(
  LANG
  LC_MEASUREMENT
  LC_PAPER
  LC_MONETARY
  LC_NAME
  LC_ADDRESS
  LC_NUMERIC
  LC_TELEPHONE
  LC_IDENTIFICATION
  LC_TIME
)
for v in "${x[@]}"; do
  echo "$v = \"${!v}\""
done

結果:

LANG = "en_US.UTF-8"
LC_MEASUREMENT = "en_US.UTF-8"
LC_PAPER = "en_US.UTF-8"
LC_MONETARY = "en_US.UTF-8"
LC_NAME = "en_US.UTF-8"
LC_ADDRESS = "en_US.UTF-8"
LC_NUMERIC = "en_US.UTF-8"
LC_TELEPHONE = "en_US.UTF-8"
LC_IDENTIFICATION = "en_US.UTF-8"
LC_TIME = "en_US.UTF-8"

請參閱bash (1) 手冊頁,了解使用${! 名稱}

declare -a MY_ENVS

# Set the above array with whatever
# env variables you want to check
# e.g.,

MY_ENVS+=( "HOME" )

遍歷所有這些,

for env_var in "${MY_ENVS[@]}"
do
    if [ -z "${env_var}" ]
    then
        echo "${env_var} not set"
    fi
done

或者,如果您想存儲與特定環境變量相對應的值,請使用關聯 arrays:

declare -A ENV_VARS_A

ENV_VARS_A["HOME"]="some val"

迭代:

for env_var in "${!ENV_VARS_A[@]}"
do
    # env_var is key
    :
done

您可以創建要迭代的環境變量列表,如ENV_VAR_ARR中所做的那樣。
然后使用for循環遍歷它們中的每一個。

for 循環將獲取列表中的每個項目,為其分配SOME_ENV_VAR並執行 do 和 done 之間的命令,然后 go 回到頂部,獲取列表中的下一個項目並重復。

該列表定義為一系列字符串,以空格分隔。

#!/bin/bash

ENV_VAR_ARR='ENV_1 ENV_2 ENV_3'

for SOME_ENV_VAR in $ENV_VAR_ARR
do
    echo $SOME_ENV_VAR
    if [[ -z "${!SOME_ENV_VAR}" ]]; then
        echo "Warning - the $SOME_ENV_VAR environment variable isn't set"
        exit 1
    fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM