2009-09-09 8 views
2

Quelle est la meilleure façon de s'assurer que toutes les variables d'environnement dont j'ai besoin pour mon script ont été définies? Actuellement, je dispose de plusieurs instructions if qui est pas très nette:Validation des variables dans le script 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 

Y at-il une meilleure façon?

Répondre

3

Vous pouvez utiliser indirection:

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

Exactement ce que je voulais dire! Très bien !! + 1 – vpram86

+0

Notez que ceci teste si vide, pas si c'est réglé – drAlberT

1

vous pouvez les court beaucoup:

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

une meilleure façon:

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

Bien sûr, si le nombre de variables que vous allez tester n'est pas faible, boucle comme suggéré @ Vision peut être utile pour éviter de répéter le code. A la réponse de @Aviator, je suggère de définir une variable bien commentée contenant une liste de vos variables à tester. De cette façon, vous ne cryptez pas votre code.

TEST_FOR_IS_SET="FOO BAR BAZ"

2

utiliser une boucle à (ensemble des variables u veulent). Est-ce que ça ne marchera pas?

+0

Merci! Je ne vais pas le suggérer à l'avenir. Je n'étais pas sûr non plus. Juste demandé :) – vpram86

+0

Wow !! Alors ce travail? – vpram86

+0

plz modifier votre réponse, je l'ai mal compris et downvoted par erreur. Modifier afin de me faire retirer mon vote – drAlberT

1

J'ai cette fonction dans ma bibliothèque shell:

# 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 
} 

Je l'utilise dans le code comme ceci:

varsSet VAR1 VAR2 VAR3 || <error handling here> 
Questions connexes