Qu'est-ce que les variables Bash et comment pouvez-vous les utiliser ?

Une photographie d'une personne programmant avec un ordinateur portable.

Bash vous permet de mapper des chaînes de texte entières à des variables uniques, simplifiant son utilisation et l’écriture de scripts. Comment fonctionnent-elles et comment pouvez-vous les utiliser ? Découvrons-le.

Table des matières

  • Qu’est-ce qu’une variable Bash ?
  • Variables en temps réel
  • Variables dans les scripts
  • Variables Bash permanentes et alias
  • Création de tableaux
  • Exécution de variables de sous-shell
  • Manipulation de sous-chaînes
  • Questions fréquentes

Qu’est-ce qu’une variable Bash ?

Les variables sont des noms faciles à retenir qui peuvent contenir différentes valeurs alphanumériques. Elles sont utiles, car elles permettent d’appliquer la même fonction sur différentes valeurs, sans avoir à réécrire un script/un morceau de code. Elles facilitent également l’écriture du script/du morceau de code, car au lieu de traiter des valeurs individuelles, vous pouvez utiliser le même nom pour toutes.

Variables en temps réel

Bash permet l’utilisation de variables. Vous pouvez créer des variables à la volée et les réutiliser pendant votre session Bash actuelle. Elles peuvent aider votre utilisation de Bash de plusieurs manières différentes et disparaîtront après la fin de la session actuelle.

Par exemple, disons que vous visitez plusieurs sites. Vous pourriez faire des recherches ou extraire des données et créer la variable suivante :

sitea=https://www.maketecheasier.com

Un terminal montrant une assignation de variable de base.

Après cela, si vous vouliez visiter notre site avec Firefox, vous pourriez simplement taper :

firefox $sitea

Un terminal montrant une variable comme argument pour un programme.

Beaucoup plus facile – et plus lisible. La variable $sitea resterait mappée au site jusqu’à ce que vous changiez son contenu manuellement ou que la session Bash se termine. Et, bien sûr, vous pouvez créer d’autres variables, comme siteb, sitec et sited.

Lorsque vous configurez de nouvelles variables, vous pouvez utiliser n’importe quel nom que vous souhaitez et stocker n’importe quelle chaîne alphanumérique à l’intérieur. Gardez cependant à l’esprit qu’elles sont sensibles à la casse par défaut. Ainsi, $sitea ne serait pas le même que $SiteA. Notez également que vous devez utiliser des guillemets lorsque vous stockez des chaînes contenant des caractères spéciaux (y compris des espaces).

Astuce : pour ceux qui sont nouveaux dans Bash, commencez par ces commandes Bash de base.

Variables dans les scripts

Les variables dans Bash sont plus utiles lors de l’écriture de scripts, car elles vous permettent d’écrire un seul script, qui peut ensuite itérer à travers différentes chaînes ou agir sur des morceaux de données personnalisés. Disons que vous écrivez un script que tout le monde pourrait utiliser sur son ordinateur, mais qui afficherait à chaque fois un message de bienvenue personnalisé. Sans variables, vous devriez écrire une version différente du script pour chaque utilisateur. Avec des variables, vous gardez le script le même et changez seulement le nom de l’utilisateur.

Un tel script ressemblerait à quelque chose comme ceci :

#!/bin/bash  

username=Ramces  
echo$username

Un terminal montrant un script d'assignation de variable de base.

L’exemple ci-dessus peut sembler redondant ; cependant, à mesure que la complexité du code augmente, les variables deviennent indispensables. Un script pourrait faire des centaines ou des milliers de lignes et contenir le nom de l’utilisateur à différents endroits. Pour mieux le comprendre, considérez le script suivant, quelque peu différent :

#!/bin/bash  

username=Linus  
echo Bonjour $username. Ceci est un script simple que j'ai écrit qui répétera votre nom - c'est-à-dire, $username - souvent comme un exemple réel de la façon d'utiliser les variables Bash. J'espère que cela facilitera la compréhension de l'utilisation des variables pour améliorer votre flux de travail Bash, $username. Dans ce cas, la variable username est mappée à votre nom. Chaque fois que Bash y fait référence, il le remplace par $username.

Un terminal montrant un script de base avec plusieurs substitutions de variables.

Le script ci-dessus utilisera le nom défini comme variable username pour compléter le texte. Si vous utilisez le nom réel de l’utilisateur, vous devrez le taper quatre fois, puis faire de même pour le prochain utilisateur, et encore quatre fois pour le suivant. Encore et encore. En l’assignant à une variable, vous n’avez qu’à le changer une fois pour chaque utilisateur, et chaque mention du nom de l’utilisateur dans le texte sera mise à jour.

Bon à savoir : en plus des variables, vous pouvez également utiliser la boucle for dans Bash.

Variables Bash permanentes et alias

Nous avons vu comment vous pouvez définir temporairement des variables et comment, pour quelque chose de plus permanent, vous pouvez les inclure dans vos propres scripts. Vous pouvez également définir des variables de manière permanente dans Bash en modifiant le fichier “~/.bashrc”.

  1. Ouvrez le fichier “~/.bashrc” dans votre éditeur de texte préféré.
nano ~/.bashrc
  1. Nous vous suggérons de commencer par un test, en ajoutant seulement une variable, afin que vous sachiez où chercher si le processus ne fonctionne pas. Déplacez-vous à la fin du fichier et, dans une nouvelle ligne, ajoutez votre variable.
myname="Ramces Red"

Un terminal montrant une nouvelle variable permanente dans le fichier bashrc.

  1. Enregistrez votre fichier et quittez l’éditeur. Les modifications ne seront pas appliquées immédiatement. Entrez ce qui suit dans votre terminal pour qu’elles prennent effet :
source ~/.bashrc
  1. Utilisez la nouvelle variable définie dans votre session Bash :
echo$myname

Vous pouvez configurer autant de variables que vous le souhaitez et simplifier considérablement vos aventures quotidiennes dans Bash.

Pour un coup de pouce supplémentaire en matière de productivité, il vaut également la peine de configurer un autre type de variable : des alias. Contrairement aux variables typiques, qui sont mappées à des données que vous pouvez utiliser dans des commandes, les alias sont utilisés à la place de commandes réelles.

Tout comme vous pouvez utiliser une variable facile à retenir pour contenir de longues chaînes de texte, vous pouvez utiliser des alias comme alternatives faciles à des commandes complexes. Vous pouvez en savoir plus à leur sujet ici, où nous transformons une commande de compression 7zip entière en un alias de deux caractères.

Enfin, même si vous avez défini une variable de manière permanente dans .bashrc, vous pouvez lui réassigner une valeur différente temporairement, comme nous l’avons vu précédemment. La variable présentera le nouveau contenu jusqu’à ce que la session Bash actuelle se termine (après déconnexion ou redémarrage) ou que vous re-sourciez le fichier .bashrc.

Création de tableaux

Bien que la plupart des utilisateurs de Bash considèrent les variables comme un lien simple entre un morceau de données et une étiquette, il est également possible de les utiliser comme un marqueur pour des tableaux. Ce sont un type de structure de données qui peut stocker plusieurs valeurs dans un format d’index numéroté. Pour créer un tableau, suivez les étapes ci-dessous :

  1. Créez un script shell vide :
nano array.sh
  1. Utilisez la sous-commande declare pour initialiser le tableau Bash dans le processus shell actuel.
declare-a myarray

Un terminal montrant l'étape de déclaration pour un tableau.

  1. Remplissez votre nouveau tableau en utilisant l’opérateur d’assignation intégré de Bash. Par exemple, la ligne de code suivante crée un tableau avec cinq éléments à l’intérieur :
myarray=([0]=hello [1]=maketecheasier [2]=its [3]=an [4]=array)

Un terminal montrant un tableau de base avec 5 éléments.

  1. Testez si votre nouveau tableau fonctionne en utilisant la commande echo pour extraire des données de celui-ci :
echo${myarray[1]}

Un terminal montrant le script de tableau récupérant un seul élément de tableau.

Vous pouvez également diffuser le contenu d’un tableau en utilisant l’opérateur “*” :

echo${myarray[*]}

Un terminal montrant le script de tableau diffusant l'ensemble du tableau.

Exécution de variables de sous-shell

L’une des plus grandes caractéristiques de Bash est sa capacité à créer des sous-shells, où des programmes peuvent s’exécuter comme s’ils étaient des fonctions de base. Par exemple, écrire ls -a dans un script shell et l’exécuter affichera toujours le contenu du répertoire de travail actuel.

Un terminal montrant une simple commande de sous-shell.

Bien que cela puisse sembler limitant, Bash étend cela en vous permettant de stocker la sortie de ces programmes à l’intérieur de variables. Cela vous permet de les utiliser comme entrée pour d’autres programmes à l’intérieur de votre script.

  1. Pour utiliser des variables de sous-shell, créez d’abord un script shell vide :
nano subshell.sh
  1. Écrivez le code de base suivant à l’intérieur de votre nouveau script shell :
#!/bin/bash  

mysubshell=$(x)  
echo"La sortie de la variable est $mysubshell"
  1. Remplacez le “x” par la commande que vous souhaitez exécuter et stocker la sortie. Par exemple, ce qui suit obtiendra le contenu du fichier world.txt et remplacera le mot “world” par “maketecheasier.”
mysubshell=$(sed s/world/maketecheasier/g world.txt)

Un terminal montrant une simple exécution de sous-shell.

  1. Testez votre nouvelle variable de sous-shell en exécutant votre nouveau script :
chmod u+x ./subshell.sh  
bash ./subshell.sh

Un terminal montrant la sortie du script de sous-shell.

FYI : en plus des variables, voici les caractères spéciaux que vous devriez connaître dans Bash.

Manipulation de sous-chaînes

En plus de stocker et de récupérer des données, vous pouvez également modifier le contenu des variables. Bash dispose d’un ensemble d’opérateurs que vous pouvez attacher à la fin de chaque variable, ce qui vous permettra d’affiner vos scripts sans appeler de programmes supplémentaires.

  1. Créez un script shell vide :
nano substring.sh
  1. Écrivez le code de base suivant à l’intérieur de votre script vide :
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mon nom de fichier est : ${mysubstring}"
  1. La manipulation de sous-chaînes de base se présente sous trois formes. Tout d’abord, le caractère “#” accepte un motif regex que le shell supprimera au début de la variable :
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mon nom de fichier est : ${mysubstring#*.}"

Un terminal montrant la manipulation de sous-chaîne de préfixe de base.

  1. Deuxièmement, le caractère “%” accepte également un motif regex que le shell supprimera à la fin de la variable :
#!/bin/bash  

mysubstring=hello.txt.old  
echo"Mon nom de fichier est : ${mysubstring%.*}"

Un terminal montrant la manipulation de sous-chaîne de suffixe de base.

  • Bash fournit également un moyen de modifier sélectivement le contenu d’une variable. Semblable au programme sed, vous pouvez utiliser le caractère “/“ pour trouver et remplacer toute chaîne à l’intérieur d’une variable :
#!/bin/bash  

mysubstring=hello.txt  
echo"Mon nom de fichier est : ${mysubstring/hello/maketecheasier}"

Un terminal montrant une fonction de sous-chaîne d'édition de flux de base.

Bon à savoir : les expressions régulières sont un outil important dans la boîte à outils de chaque utilisateur Linux. Apprenez à les utiliser efficacement grâce à notre fiche pratique facile à apprendre.

Questions fréquentes

Est-il possible d’exécuter un script shell à l’intérieur d’une variable ?

Oui, en écrivant le chemin complet du script que vous souhaitez exécuter. Par exemple, exécuter $(/home/ramces/.scripts/sample.sh) créera un sous-shell Bash et exécutera le script “sample.sh” depuis mon répertoire personnel.

Pouvez-vous supprimer une variable pendant qu’un script est en cours d’exécution ?

Oui. Vous pouvez supprimer une variable d’un processus shell en cours d’exécution en insérant la sous-commande unset suivie du nom de la variable dans votre script. Il est important de noter que l’exécution de cette commande ne supprimera pas les variables qui s’exécutent en dehors du processus shell actuel.

Pouvez-vous utiliser une variable permanente à l’intérieur d’un script shell externe ?

Oui. Il est possible de se référer à la valeur d’une variable qui a été déclarée en dehors du processus shell actuel. Cependant, vous devez également faire attention lorsque vous utilisez des variables externes, car il est facile de les écraser temporairement.

Crédit image : Unsplash. Toutes les modifications et captures d’écran par Ramces Red.