2017-02-13 51 views
0

我有一個功能,可以讓我檢查尚未設定的變量:驗證參數和設定值,如果空的,bash函數

ValidateArgs() { 
for Var in "[email protected]" ; do 
    echo "Validating argument $Var with value \"${!Var}\"." 
    if [ -z "${!Var}" ] ; then 
     echo "Argument \"$Var\" is required. Please define $Var." 
     read -rp "Enter $Var: " Var 
     echo -e "\n" 
    fi 
done 
} 

我想加強這方面的功能,因此它能夠設置一個值在與read -rp一起閱讀後通過的論點。

我嘗試了幾種組合,是否有可能這樣做,如果是這樣,那麼最簡單的方法是什麼?

的函數被調用是這樣的:

ValidateArgs Action HostName 

如果行動和主機名都沒有設置過ValidateArgs去功能後的值被要求,應設置。我寧願在主腳本中使用該功能。

+1

從技術上說,你不是活得檢查未設置的變量;您正在檢查缺少非空值的變量。請閱讀'-v'運算符和'$ {var:?msg}'參數擴展。 – chepner

回答

1

嘗試創建一個腳本,並使用source這樣運行了它原來的殼裏:

ValidateArgs() { 
for Var in "[email protected]" ; do 
    echo "Validating argument $Var with value \"${!Var}\"." 
    if [ -z "${!Var}" ] ; then 
     echo "Argument \"$Var\" is required. Please define $Var." 
     printf "Enter $Var: " 
     read value 
     export $Var=$value 
    fi 
done 
} 

ValidateArgs [email protected] 

一個你這樣做,你可以運行像腳本:

source ./test.sh myvar 
Validating argument myvar with value "". 
Argument "myvar" is required. Please define myvar. 
Enter myvar: myvalue 

echo $myvar 
myvalue 
+1

如果可能,我寧願在主腳本中使用該函數,以避免依賴性。但有趣的建議,TX。 – willemdh

+0

我能夠在主腳本中使用導出方法。接受答案。乾杯 – willemdh