2009-09-09 117 views
2

確保我的腳本所需的所有環境變量都已設置的最佳方法是什麼? 目前,我有多個if語句這是不是很整齊:在Shell腳本中驗證變量

if [ -z "$VAR1" ] 
then 
    echo VAR1 not set 
    exit 
fi 

if [ -z "$VAR2" ] 
then 
    echo VAR2 not set 
    exit 
fi 

if [ -z "$VAR3" ] 
then 
    echo VAR3 not set 
    exit 
fi 

有沒有更好的辦法?

回答

3

您可以使用間接:

vars="FOO BAR" 
for var in $vars 
do 
    [[ -z ${!var} ]] && 
     echo "Variable ${var} is empty" || 
     echo "The value of variable ${var} is ${!var}" 
done 
+0

正是我的意思!好!! + 1 – vpram86 2009-09-09 09:23:14

+0

請注意,這測試是否爲空,而不是如果它設置 – drAlberT 2009-09-09 09:39:14

1

可以短他們很多:

[ -z "$FOO" ] && echo "FOO is empty" 
[ -z "$BAR" ] && echo "BAR is empty" 

一個更好的辦法:

${FOO:?"FOO is null or not set"} 
${BAR:?"BAR is null or not set"} 

當然,如果你要測試變量的數目不低,循環正如@Aviator建議可能有用,以避免重複代碼。

在@Aviator的答案,我想建議定義一個好的評論變量,其中包含您要測試的變量列表。這樣你就不會讓你的代碼變得神祕。

TEST_FOR_IS_SET="FOO BAR BAZ"

2

使用在循環(組變量ü希望)。這不行嗎?

+0

謝謝!我不會在將來提出這個建議。我也不確定。只是問:) – vpram86 2009-09-09 09:12:00

+0

哇!那麼這個工作? – vpram86 2009-09-09 09:12:56

+0

plz編輯你的答案,我誤解了它,並錯誤地downvoted。編輯爲了讓我刪除我的投票 – drAlberT 2009-09-09 09:13:38

1

我有這個功能在我的殼庫:

# Check that a list of variables are set to non-null values. 
# [email protected]: list of names of environment variables. These cannot be variables local 
#  to the calling function, because this function cannot see them. 
# Returns true if all the variables are non-null, false if any are null or unset 
varsSet() 
{ 
     local var 
     for var ; do 
       eval "[ -n \"\$$var\" ] || return 1" 
     done 
} 

我使用它的代碼是這樣的:

varsSet VAR1 VAR2 VAR3 || <error handling here>