Cet article fait partie de notre série de tutoriels bash en cours. Comme tous les autres langages de programmation, Bash fournit également des variables.
Les variables bash fournissent un stockage temporaire des informations qui seront nécessaires pendant la durée de vie du programme.
Syntaxe :
VARNAME=VALUE
Remarque : Il ne doit pas y avoir d'espace autour du signe "=" dans l'affectation des variables. Lorsque vous utilisez VAR=VALUE, le shell voit le "=" comme un symbole et traite la commande comme une affectation de variable. Lorsque vous utilisez VAR =VALUE, le shell suppose que VAR doit être le nom d'une commande et essaie de l'exécuter.
Shell ne se soucie pas du type de variables. Les variables peuvent stocker des chaînes, des entiers ou des nombres réels.
Exemple.1 Utilisation d'une affectation de variable Bash simple
Le script suivant crée une variable appelée LIST et attribue la valeur "/var/opt/bin". Pour accéder aux variables, préfixez simplement le nom de la variable avec $, ce qui vous donnera la valeur stockée dans cette variable.
$ cat sample.sh #!/bin/bash LIST="/var/opt/bin/" ls -l $LIST
Exécutez le script ci-dessus, qui listera /var/opt/bin au format long comme indiqué ci-dessous.
$ ./sample.sh total 8 drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist
Portée de la variable bash :locale et globale
Dans Bash, les variables n'ont pas besoin d'être déclarées. Mais, lorsque vous accédez à la variable qui n'est pas utilisée jusqu'à présent, vous n'obtiendrez aucun message d'avertissement ou d'erreur. Au lieu de cela, il affichera une valeur vide.
Exemple 2. Valeurs vides dans les variables bash
$ cat var1.sh #!/bin/sh echo "Variable value is: $VAR1" VAR1="GEEKSTUFF" echo "Variable value is: $VAR1" $ ./var1.sh Variable value is: Variable value is: GEEKSTUFF
Comme indiqué ci-dessus, initialement la variable aura une valeur vide, après l'affectation, vous pouvez obtenir vos valeurs. La commande export est utilisée pour exporter une variable depuis un shell interactif. l'exportation montre l'effet sur la portée des variables.
Exemple 3. Variables Bash sans exportation
Attribuez une variable avec une valeur dans un shell interactif et essayez d'y accéder dans votre script shell.
$ VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
Maintenant, exécutez le script ci-dessus comme indiqué ci-dessous.
$ ./var2.sh VAR2= VAR2=UNIX
Vous obtiendrez toujours une valeur vide pour la variable VAR2. Le shell stocke la variable VAR2 avec LINUX uniquement dans le shell actuel. Lors de l'exécution de var2.sh, il génère le shell et exécute le script. Ainsi, la variable VAR2 n'aura pas la valeur dans le shell généré. Vous devez exporter la variable pour qu'elle soit héritée par un autre programme - y compris un script shell, comme indiqué ci-dessous.
Exemple 4. Exportation d'une variable Bash
$ export VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
Exécutez maintenant le script ci-dessus.
$ ./var2.sh VAR2=LINUX VAR2=UNIX $ $echo $VAR2 LINUX
Maintenant, vous pouvez remarquer qu'après l'exécution du script shell var2.sh, la valeur de VAR2 est LINUX. Parce que les variables ne seront pas renvoyées à votre shell interactif, à moins que vous n'exécutiez le script dans le shell actuel.
Déclarer une variable bash
En utilisant l'instruction declare dans bash, nous pouvons limiter la valeur attribuée aux variables. Il restreint les propriétés des variables. L'option dans une instruction declare est utilisée pour déterminer le type d'une variable.
Syntaxe :
declare option variablename
- declare est un mot clé
- l'option pourrait être :
- -r variable en lecture seule
- -i variable entière
- -une variable tableau
- -f pour les fonctions
- -x déclare et exporte vers les commandes suivantes via l'environnement.
Exemple 5. Déclaration d'une variable Bash à l'aide de declare
$ cat declar.sh #!/bin/bash declare -i intvar intvar=123 # Assigning integer value. echo $intvar intvar=12.3 #Trying to store string type value to an integer variable echo $intvar declare -r rovar=281 rovar=212 # Trying to change the readonly variable.
À partir de l'exécution ci-dessous, vous pouvez remarquer le message d'erreur lorsque vous affectez des données non valides à une variable.
$ ./declar.sh 123 t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3") 123 t.sh: line 11: rovar: readonly variable
Variables globales de bash
Les variables globales sont également appelées variables d'environnement, qui seront disponibles pour tous les shells. La commande printenv est utilisée pour afficher toutes les variables d'environnement.
$ printenv SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/1 HOME=/root LOGNAME=root CVS_RSH=ssh
Variables de bash locales
Les variables locales ne sont visibles que dans le bloc de code. local est un mot clé utilisé pour déclarer les variables locales. Dans une fonction, une variable locale n'a de sens que dans ce bloc fonctionnel.
Exemple 6. Variables Bash globales et locales
$ cat localvar.sh #!/bin/bash pprint() { local lvar="Local content" echo -e "Local variable value with in the function" echo $lvar gvar="Global content changed" echo -e "Global variable value with in the function" echo $gvar } gvar="Global content" echo -e "Global variable value before calling function" echo $gvar echo -e "Local variable value before calling function" echo $lvar pprint echo -e "Global variable value after calling function" echo $gvar echo -e "Local variable value after calling function" echo $lvar
Exécutez le script ci-dessus,
$ sh t.sh Global variable value before calling function Global content Local variable value before calling function Local variable value with in the function Local content Global variable value with in the function Global content changed Global variable value after calling function Global content changed Local variable value after calling function
Dans la sortie ci-dessus, les variables locales n'auront qu'une valeur vide avant et après l'appel de la fonction. Sa portée est uniquement dans la fonction. Il a disparu de la fonction, alors que la variable globale a la valeur mise à jour même après l'exécution de la fonction.