21/12/2024

Bash

Script Bash – Comment créer et manipuler un tableau ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à créer et à manipuler un tableau dans un script Bash. Nous verrons les bases des tableaux en Bash : comment initialiser un tableau, comment ajouter des éléments à ce tableau, mais aussi comment parcourir un tableau avec une boucle For.

Dans les différents langages, les tableaux sont très pratiques pour stocker plusieurs valeurs sous un même nom. Donc, nous pouvons en quelque sorte créer des listes de valeurs. Il y a différents types de tableaux en Bash, notamment des tableaux simples où chaque valeur est associée à un numéro d'index, et des tableaux associatifs où il y a des paires de données (association clé / valeur, où la clé est le texte de votre choix).

Version originale de l'article : 23 avril 2013.

II. Bash : comment déclarer et initialiser un tableau ?

Pour commencer, voyons comment déclarer et initialiser un tableau en Bash. La déclaration d'un tableau s'effectue en précisant les valeurs du tableau entre parenthèses. Ces valeurs sont séparées par un espace.

Le tableau ci-dessous contient 3 valeurs. Chaque valeur est associée à un numéro d'index, en commençant à zéro. Ce qui donne :

  • Index 0 : "Linux
  • Index 1 : "Windows"
  • Index 2 : "MacOS"
Tableau=("Linux" "Windows" "MacOS")

Nous pourrions aussi initialiser le tableau (donc un tableau vide) et venir ajouter les valeurs tour à tour. Ceci pourrait avoir de l'intérêt pour construire un tableau à partir d'une boucle.

# Déclaration d'un tableau vide
Tableau=()
# Ajouter des valeurs au tableau
Tableau+=("Linux")
Tableau+=("Windows")
Tableau+=("MacOS")

Dans ce cas, le tableau sera complété progressivement, index après index. Nous pouvons aussi stocker une valeur dans un index précis. Par exemple pour stocker une valeur dans l'index numéro 6 :

Tableau+=([6]="Android")

C'est également une possibilité offerte dès la création du tableau :

Tableau=("Linux" "Windows" "MacOS" [6]="Android")

Nous allons maintenant voir comment accéder aux éléments d'un tableau et les afficher.

III. Bash : comment lire les valeurs d'un tableau ?

Pour lire les valeurs stockées d'un tableau, nous devons spécifier l'index de l'élément désiré ou afficher l'intégralité du tableau. Pour rappel, en Bash, les indices des tableaux commencent à 0. Voici comment procéder :

# Afficher la valeur à l'index X du tableau
echo ${Tableau[X]}

# Afficher la première valeur du tableau
echo ${Tableau[0]}

# Afficher la deuxième valeur du tableau
echo ${Tableau[1]}

# Afficher la troisième valeur du tableau
echo ${Tableau[2]}

Pour afficher tous les éléments d'un tableau, nous utilisons la syntaxe suivante :

echo ${Tableau[@]}

L'image ci-dessous montre bien que nous avons pu lire les informations présentes dans notre tableau.

Lire un tableau en Bash sous Linux

Voyons maintenant comment modifier les éléments d'un tableau.

IV. Bash : comment modifier les valeurs d'un tableau ?

Notre tableau est accessible en lecture et écriture, donc nous pouvons modifier ses valeurs à notre guise. Pour modifier une valeur, nous devons spécifier le numéro d'index ciblé. Voici un exemple pour écraser la valeur présente à l'index 1 du tableau :

# Modification du deuxième élément du tableau
Tableau[1]="WindowsServer"

Ce qui donne :

Modifier valeur tableau script Bash

Nous pouvons également supprimer un élément d'un tableau. Soit, nous pouvons remplacer la valeur actuelle par une valeur vide, ou utiliser la commande unset.

# Suppression du deuxième élément du tableau
Tableau[1]=""
# ou
unset Tableau[1]

De la même façon, la commande unset peut être utilisée pour détruire entièrement le tableau :

unset Tableau

Nous allons maintenant voir comment itérer sur les éléments d'un tableau.

V. Bash : parcourir un tableau avec une boucle For

L'itération sur les éléments d'un tableau est une opération fréquente lorsque l'on code un script Bash. Nous pouvons utiliser une boucle for pour parcourir tous les éléments d'un tableau, ce qui permettra d'appliquer un traitement sur chaque valeur présente dans le tableau. Ceci sera utile pour automatiser des tâches répétitives.

L'exemple ci-dessous sert uniquement à afficher dans la console un texte suivi de la valeur du tableau.

# Parcourir un tableau avec une boucle For
for TableauValeur in ${Tableau[@]}
do
  echo "Valeur du tableau : $TableauValeur"
done

Remarque : la variable "TableauValeur" est interne au traitement de la boucle For.

Donc, suite à l'exécution de ce bout de code, le résultat suivant est retourné dans la console :

Bash - Parcourir un tableau avec une boucle For

Comme nous l'espérions, cette méthode nous permet de traiter chaque élément du tableau individuellement.

VI. Bash : compter le nombre d'éléments dans un tableau

Nous pouvons compter le nombre d'éléments afin d'obtenir sa longueur, ou plutôt sa taille si vous préférez. Pour cela, nous devons utiliser "${#Tableau[@]}" en précisant le nom de la variable correspondante à notre tableau à la place de la chaine "Tableau".

# Déclarer le tableau
Tableau=("Linux" "Windows" "MacOS")

# Compter et afficher le nombre d'éléments dans le tableau
echo "${#Tableau[@]}"

# Résultat obtenu :
3

VII. Bash : créer un tableau en lecture seule

En Bash, pour déclarer un tableau en lecture seule, c'est-à-dire dont les valeurs peuvent être lues, mais non écrasées et statique (pas possible d'ajouter des valeurs), il est nécessaire d'utiliser la commande declare.

La commande declare sous Linux est utilisée dans les scripts Bash pour définir des variables et des tableaux lorsqu'il est nécessaire de spécifier leurs attributs. C'est notamment le cas pour déclarer un tableau en lecture seule, mais aussi une variable en lecture seule. Donc, nous allons en faire usage dans le cas présent.

La commande ci-dessous sert à créer un tableau nommé "TabRo" (nom de la variable) en lecture seule (option "-r" pour "readonly") et avec 3 valeurs.

declare -r TabRo=("Linux" "Windows" "MacOS")

Si nous essayons de modifier ou d'ajouter une valeur à ce tableau, nous obtenons une erreur, car la variable "TabRo" est en lecture seule. Ce type de tableau est intéressant si vous souhaitez stocker des valeurs et vous assurer qu'elles ne pourront pas être écrasées.

Bash - Créer un tableau en lecture seule

VIII. Bash : créer un tableau associatif

Un tableau associatif permet d'utiliser des noms de clés personnalisés à la place des numéros d'index (0, 1, 2, 3, etc...). Nous allons introduire cette notion. La syntaxe est la suivante :

declare -A <Nom tableau>=([<nom clé>]="<valeur>" [<nom clé>]="<valeur>" etc...)

Nous devons utiliser la commande déclare avec l'option "-A" pour préciser explicitement qu'il s'agit d'un tableau associatif. À l'inverse, si nous utilisons "-a" à la place, nous créons un tableau simple basé sur les index.

Donc, nous pouvons créer un tableau nommé "TableauAsso" avec les clés "Pays", "Prenom" et "Nom" chacune avec une valeur personnalisée. La déclaration du tableau devra être effectuée de cette façon :

declare -A TableauAsso=([Pays]="France" [Prenom]="Florian" [Nom]="Burnel")

Nous pouvons consulter les valeurs de ce tableau :

echo ${TableauAsso[@]}

Mais aussi, les clés de ce tableau :

echo ${!TableauAsso[@]}

Pour obtenir la valeur associée à une clé, il suffit de préciser son nom comme nous l'avions fait pour le numéro d'index :

echo ${TableauAsso[Pays]}

Enfin, voici le résultat en image :

Bash - Créer un tableau associatif

Il est toujours intéressant de connaître ce type de tableaux, bien que cette syntaxe soit moins répandue que celle évoquée précédemment.

IX. Bash : concaténer deux tableaux

Pour finir cet article, nous allons répondre à la problématique suivante : comment concaténer deux tableaux en Bash ? Autrement dit, nous allons fusionner nos deux tableaux pour qu'ils ne fassent qu'un.

Commençons par définir les deux tableaux nommés "Tableau1" et "Tableau2" :

Tableau1=("T1valeur1" "T1valeur2" "T1valeur3" "T1valeur4")
Tableau2=("T2valeur1" "T2valeur2")

Nous constatons que le premier tableau a 4 valeurs, tandis que le second tableau a 2 valeurs.

Désormais, nous allons concaténer ces deux tableaux dans un nouveau tableau correspondant à la variable "Tableau12".

Tableau12=(${Tableau1[@]} ${Tableau2[@]})

Si nous affichons le contenu de ce nouveau tableau, nous pouvons voir qu'il contient bien les 6 valeurs !

echo ${Tableau12[@]}

Pour finir, le résultat en image :

Bash - Concaténer des tableaux

X. Conclusion

Suite à la lecture de ce tutoriel et grâce aux différents exemples, vous devriez être en mesure de mettre en pratique les tableaux dans vos scripts Bash ! Nous avons vu comment déclarer, lire, modifier, supprimer un tableau, mais aussi comment effectuer certaines actions un peu plus complexes.

Pour approfondir le sujet, vous pouvez consulter nos tutoriels Bash en utilisant le lien ci-dessous :

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

6 commentaires sur “Script Bash – Comment créer et manipuler un tableau ?

  • Un exemple d’output aurait été parfait, ainsi que quelques exemples plus fournis aussi 😉

    Répondre
  • Merci beaucoup pour ce tutoriel qui m’a été d’une grande utilité !

    Par contre, il comporte un erreur si je ne dis pas de bêtises !

    Pour la lecture simple d’un tableau, vous indiquez ceci : echo $tab[1];
    Alors qu’il faudrait écrire echo ${tab[1]}; à la place.

    Répondre
  • bonjour,

    je dois faire un script qui créér un fichier le nom et type de fichier et désigner sur linvité de commande
    et apres faire un tableau dans le fichier avec des information donnée dans linvité de commande le probleme est pour inserer mon tableau dans le fichier.

    Répondre
  • Article plus que nul. Déjà en effet il faut écrire echo ${tab[1]} (et le point-virgule n’est pas nécessaire).
    Toutefois peut-être qu’il serait bon d’indiquer comment créer un tableau d’un coup => tab=(« bonjour » « au revoir »), d’indiquer comment obtenir les indices (car sur une plage d’indices, on n’est pas obligé d’avoir systématiquement tous les indices affecté avec une valeur) => echo {!$tab[*]}.

    Bref entre cet article et rien, il aurait mieux valu ne rien écrire, ça évitera à tous ceux qui cherchent des informations sur les tableaux en shell de venir perdre leur temps ici. Encore un néophyte qui se croit capable d’enseigner…

    Répondre
    • Esprit de quelqu’un négatif, ce qui a été partagé il ne s’appelle pas un cours mais juste une introduction de base pour un débutant sur les tableaux, si vous croyez que vous êtes plus intelligent ne liserez pas ses partages mais sachez qu’il est professionnel qui connaît le sens du savoir et le mérite du partage et il ne fait pas de commentaires pour se vanter.

      Répondre
  • Quand on en arrive à faire plus d’un ou 2 tableaux dans un script Bash c’est qu’il est temps d’installer python…

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.