Comment vérifier si une variable d'environnement existe et obtenez sa valeur? [dupliquer]
cette question a déjà une réponse ici:
- Comment vérifier si une variable est définie dans Bash? 31 réponses
j'écris un script shell. Dans ce script shell, je suis avoir une variable qui prend soit une valeur par défaut ou la valeur d'une variable d'environnement. Cependant, l' variable d'environnement n'a pas à être présent.
par exemple, supposons, avant d'exécuter le script, que j'exécute l'opération suivante:
export DEPLOY_ENV=dev
Comment dire au script de rechercher cette variable d'environnement, et stocker sa valeur dans une variable à l'intérieur du script. De plus, comment dire au script que si cette variable d'environnement n'existe pas, stocker une variable par défaut?
6 réponses
[ -z "${DEPLOY_ENV}" ]
vérifie si DEPLOY_ENV
a une longueur égale à zéro. Pour pouvoir courir:
if [[ -z "${DEPLOY_ENV}" ]]; then
MY_SCRIPT_VARIABLE="Some default value because DEPLOY_ENV is undefined"
else
MY_SCRIPT_VARIABLE="${DEPLOY_ENV}"
fi
# or using a short-hand version
[[ -z "${DEPLOY_ENV}" ]] && MyVar='default' || MyVar="${DEPLOY_ENV}"
# or even shorter use
MyVar="${DEPLOY_ENV:-default_value}"
vous pouvez simplement utiliser extension du paramètre :
${paramètre: - word}
si paramètre est désactivé ou nul, l'expansion de mot est substitué. Sinon, la valeur de paramètre est remplacée.
alors essayez ceci:
var=${DEPLOY_ENV:-default_value}
Il y a aussi la forme ${paramètre-mot} , qui remplace la valeur par défaut seulement quand paramètre est désactivé (mais pas quand il est nul).
Pour démontrer la différence entre les deux:
$ unset DEPLOY_ENV
$ echo "'${DEPLOY_ENV:-default_value}' '${DEPLOY_ENV-default_value}'"
'default_value' 'default_value'
$ DEPLOY_ENV=
$ echo "'${DEPLOY_ENV:-default_value}' '${DEPLOY_ENV-default_value}'"
'default_value' ''
si vous ne vous souciez pas de la différence entre une variable débranchée ou une variable avec une valeur vide, vous pouvez utiliser l'extension du paramètre valeur par défaut:
foo=${DEPLOY_ENV:-default}
Si vous faire soins à propos de la différence, de supprimer la virgule
foo=${DEPLOY_ENV-default}
vous pouvez également utiliser l'opérateur -v
pour tester explicitement si un paramètre est défini.
if [[ ! -v DEPLOY_ENV ]]; then
echo "DEPLOY_ENV is not set"
elif [[ -z "$DEPLOY_ENV" ]]; then
echo "DEPLOY_ENV is set to the empty string"
else
echo "DEPLOY_ENV has the value: $DEPLOY_ENV"
fi
il n'y a pas de différence entre les variables d'environnement et les variables dans un script. Les variables d'environnement sont définies plus tôt, en dehors du script, avant que le script ne soit appelé. Du point de vue du script, une variable est une variable.
vous pouvez vérifier si une variable est définie:
if [ -z "$a" ]
then
echo "not defined"
else
echo "defined"
fi
et ensuite définir une valeur par défaut pour les variables non définies ou faire autre chose.
le -z
contrôle pour un chaîne de longueur zéro (c'est-à-dire vide). Voir man bash
et la section expressions conditionnelles.
Vous pouvez également utiliser set -u
au début de votre script pour le faire échouer une fois qu'il rencontre une variable non définie, si vous voulez éviter d'avoir une variable non définie briser les choses de manière créative.
NEW_VAR=""
if [[ ${ENV_VAR} && ${ENV_VAR-x} ]]; then
NEW_VAR=${ENV_VAR}
else
NEW_VAR="new value"
fi
toutes les réponses ont fonctionné. Cependant, j'ai dû ajouter les variables dont j'avais besoin pour accéder aux fichiers sudoers comme suit:
sudo visudo
Defaults env_keep += "<var1>, <var2>, ..., <varn>"