2017-02-13 39 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