Skip to main content

variables-bash

Comment utiliser les variables dans un script Bash

Introduction

Sous Unix/Linux, si vous souhaitez automatiser les tâches répétitives, il est recommandé d'utiliser un script bash et, si nécessaire, de le planifier via crontab. Un script bash contient des commandes de configuration, des boucles et des variables.

Les variables sont les éléments constitutifs du langage de programmation. Elles nous permettent de nous référer à un emplacement de mémoire en utilisant un nom. À l'aide des variables, nous pouvons assigner, lire et manipuler des valeurs stockées à un emplacement particulier de la mémoire. En outre, des noms de variables soigneusement choisis améliorent la lisibilité du programme.

Règles et conventions de dénomination des variables

Comme d’autres langages de programmation, il existe certaines règles et conventions qui doivent être respectées lorsque vous travaillez avec des variables dans bash.

Commençons par parler des règles :

  • Un nom de variable ne peut contenir que des caractères alphanumériques (lettres et chiffres) et un trait de soulignement
  • Le nom de la variable doit commencer par une lettre ou un caractère de soulignement
  • Les noms de variables sont sensibles à la casse. Cela signifie que msg et MSG sont deux variables totalement différentes

Les conventions ne sont pas des règles mais des bonnes pratiques largement acceptées. Examinons les conventions liées à la dénomination des variables :

  • Toutes les variables sont définies à l'aide de lettres MAJUSCULES
  • Un caractère de soulignement est utilisé pour améliorer la lisibilité. Par exemple, une variable FIRST_NAME est plus lisible que FIRSTNAME

Travailler avec des variables

Dans cette section, nous verrons comment affecter et afficher la valeur d'une variable. Ensuite, nous verrons comment désactiver la valeur d'une variable. Enfin, nous verrons comment créer une variable protégée en écriture.

Nous pouvons attribuer une valeur à une variable à l'aide d'un opérateur d'affectation comme suit :

MSG="Hello, World"

Nous pouvons utiliser le symbole Dollar ($) avec une variable pour imprimer sa valeur :

echo $MSG
# Output
Hello, World

De plus, nous pouvons également utiliser l'opérateur d'affectation pour écraser la valeur de la variable :

MSG="New Value"
echo $MSG
#New Value

En bash, nous pouvons utiliser la commande unset pour effacer la valeur de la variable. Voyons cela avec un exemple :

echo $MSG
#New Value
unset MSG
echo $MSG

Dans un script plus important, nous constatons souvent que de nombreuses variables sont utilisées. Se souvenir du nom et de l'emplacement de chaque variable est une tâche impossible. Dans ce cas, il est possible que quelqu'un écrase une variable existante par inadvertance. Pour éviter de tels scénarios, nous pouvons utiliser la commande readonly pour protéger la variable contre l'écriture.

MSG="Read-only message"
readonly MSG
echo $MSG
#Read-only message

Essayons maintenant de modifier la variable MSG et d’observer le comportement :

MSG="Modified message"
bash: MSG: readonly variable

Exporter une variable

Dans bash, par défaut, les variables sont limitées au processus actuel uniquement. Cela signifie que la variable définie dans le processus parent n'est pas visible par défaut pour ses enfants. Voyons cela avec un exemple :

Tout d’abord, définissez une nouvelle variable et imprimez sa valeur :

MESSAGE="Hello, World"
echo $MESSAGE
Hello, World

Maintenant, lançons une autre instance du shell bash et imprimons la valeur de la même variable :

bash
echo $MESSAGE

Dans la sortie ci-dessus, nous pouvons voir que la valeur de la variable est vide. Pour surmonter cette limitation, nous pouvons utiliser la commande export. Cette commande rend les variables du processus parent visibles pour leurs enfants.

Pour comprendre cela, nous devons effectuer les opérations suivantes dans l’ordre :

  • Sortir du shell de l’enfant
  • Exporter une variable dans le shell parent
  • Lancer une nouvelle instance du shell bash en tant que processus enfant
  • Imprimer la valeur de la variable

Stockage de la sortie de la commande dans une variable

Parfois, nous devons stocker la sortie de la commande dans la variable. Dans de tels scénarios, nous pouvons utiliser un opérateur de substitution de commandes ou Backquotes(`). Avec cette approche, le shell exécute d'abord la commande, puis stocke la sortie dans une variable.

CUR_DIR=`pwd`
echo "Current directory = $CUR_DIR"
#Current directory = /tmp

Nous pouvons également obtenir le même résultat en utilisant l'opérateur de substitution de commande :

CUR_DIR=$(pwd)
echo "Current directory = $CUR_DIR"
#Current directory = /tmp

Variable Types

Dans bash, il existe trois types de variables :

Variables définies par l'utilisateur Ces variables sont créées explicitement par l'utilisateur. Les variables que nous avons créées dans les sections précédentes sont des exemples de variables définies par l'utilisateur. La portée de cette variable est limitée au processus en cours et à ses enfants uniquement.

Variables définies par le système

Les utilisateurs ne créent pas ces variables. Elles sont créées par le système d’exploitation lui-même. Contrairement aux variables définies par l’utilisateur, ces variables sont disponibles pour chaque processus exécuté sur le système.

Certaines des variables couramment utilisées de ce type sont:

PWD, USER, SHELL, HOSTNAME

Nous pouvons utiliser la commande env pour dresser la liste de toutes les variables définies par le système :

env

Variables spéciales

Comme leur nom l'indique, ce sont des variables spéciales utilisées par bash. Ces variables sont disponibles pour tous les utilisateurs du système.

Voyons quelques-unes des variables spéciales couramment utilisées dans le bash : Rechercher le nom du processus actuel.

Nous pouvons utiliser la variable $0 pour trouver le nom du processus actuel. Trouvons le nom du shell actuel en utilisant ceci :

echo $0

Maintenant, changeons le shell et exécutons à nouveau la même commande :

sh
echo $0
#sh

Trouver l'état de sortie de la commande

Nous pouvons utiliser la variable $? pour trouver l'état de sortie de la dernière commande exécutée. La valeur zéro représente la réussite tandis que la valeur non nulle représente l'échec de l'exécution de la commande.

ls -d /tmp/
/tmp/
echo $?
#0

Maintenant, exécutons la commande qui va générer une erreur :

ls non-existing-file
#ls: cannot access 'non-existing-file': No such file or directory
echo $?

Trouver l'ID de processus du shell actuel

Nous pouvons utiliser la variable $$ pour trouver l'identifiant du processus du shell actuel. Trouvons l'identifiant du processus bash en utilisant ceci :

echo "Process ID of the current shell = $$"
#Process ID of the current shell = 92211

Vérifions que le résultat est correct en utilisant la commande pgrep :

pgrep bash