2017-02-13 8 views
0

У меня есть функция, которая позволяет мне проверить неустановленные переменные:аргументов Validate и установите значение, если пустое с функцией Баша

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.

Я пробовал несколько комбинаций, можно ли это сделать, и если да, то каков был бы путь ebst?

Функция вызывается так:

ValidateArgs Action HostName 

если действие и HostName убираются после прохождения ValidateArgs функционировать значение задается и должен быть установлен. Я бы предпочел использовать функцию в главном скрипте.

+1

Технически, вы Арен» t проверка несвязанных переменных; вы проверяете переменные, у которых отсутствует непустое значение. Читайте на '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. – 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

Я бы предпочел использовать функцию в главном скрипте, если это возможно, чтобы избежать зависимостей. Но интересное предложение, т. – willemdh

+0

Мне удалось использовать метод экспорта в основном скрипте. Ответ принят. ура – willemdh