in

Que sont les dictionnaires Bash sur Linux et comment les utilisez-vous ?

fatmawati achmad zaenuri/Shutterstock.com

Les dictionnaires Bash vous donnent des cartes de hachage et des tableaux associatifs dans les scripts shell Linux. Nous allons vous montrer comment utiliser ces structures de données puissantes et utiles dans vos propres scripts shell Linux.

Une rose sous un autre nom

Le nom formel des dictionnaires est tableau associatif. Elles sont également appelées tables de hachage et cartes de hachage. Il s’agit d’une structure de données qui fonctionne de la même manière qu’un tableau ordinaire, mais avec une différence significative.

Un tableau est un ensemble de valeurs de données contenues dans une structure de données. Pour accéder à l’une des valeurs de données, appelées éléments de tableau, vous devez connaître leur position dans le tableau. La position d’un élément de tableau dans le tableau est appelée son index, donc ces types de tableaux sont appelés tableaux indexés. Ce sont les types de tableaux les plus couramment utilisés.

Cependant, ils ont un inconvénient. Comment accéder à un élément de tableau si vous ne connaissez pas sa position dans la liste ? Vous devez parcourir tous les éléments du tableau, en testant pour voir si la valeur à cet emplacement est celle que vous recherchez.

Les tableaux associatifs surmontent ce problème. Ils n’utilisent pas d’entiers pour identifier de manière unique les éléments du tableau. Ils utilisent des mots uniques appelés mots-clés. Vous pouvez récupérer la valeur d’un élément de tableau en utilisant son mot-clé, quel que soit son emplacement dans le tableau. Avec un tableau indexé, les nombres entiers représentant les positions dans le tableau sont dans l’ordre croissant. Les mots-clés dans un tableau associatif peuvent être dans n’importe quel ordre.

Vous pouvez rechercher une valeur dans un tableau associatif en effectuant une recherche avec son mot-clé. Rechercher un mot et récupérer sa valeur associée imite la recherche d’un mot dans un dictionnaire et la recherche de sa signification. C’est pourquoi les tableaux associatifs sont appelés dictionnaires.

Bash 4.0 ou supérieur

Les tableaux associatifs sont pris en charge dans le shell Bash version 4.0 ou supérieure. Si vous utilisez une distribution Linux actuelle, tout devrait bien se passer. Pour vérifier votre version de Bash, utilisez cette commande :

bash --version

La machine utilisée pour rechercher cet article a Bash 5.1.4 installé, nous sommes donc prêts à partir.

Principes de base

Pour créer un tableau associatif sur la ligne de commande du terminal ou dans un script, nous utilisons la commande Bash declare. Le -A L’option (associative) indique à Bash qu’il s’agira d’un tableau associatif et non d’un tableau indexé.

declare -A acronyms

Cela crée un tableau associatif appelé « acronymes ».

Pour mettre des données dans notre tableau, nous devons fournir des mots-clés et des valeurs. Nous pouvons le faire en utilisant ce format :

array-name[key]=Value

Ajoutons quelques éléments de tableau :

acronyms[ACK]=Acknowledgement
acronyms[BGP]="Border Gateway Protocol"
acronyms[CIDR]="Classless Inter-Domain Routing"
acronyms[DHCP]="Dynamic Host Configuration Protocol"
acronyms[EOF]="End of Frame"

Ces commandes définissent cinq éléments de tableau. Notez que les valeurs sont entourées de guillemets s’il y a des espaces dans la valeur. Nos mots-clés ont été saisis par ordre alphabétique, mais ils peuvent être saisis dans l’ordre de votre choix. Les mots-clés doivent être uniques. Si vous essayez de créer deux entrées avec le même mot-clé, la deuxième valeur que vous entrez écrasera la première. Vous n’aurez toujours qu’une seule entrée avec ce mot-clé, et elle sera associée à la deuxième valeur que vous avez ajoutée.

Pour récupérer les valeurs du tableau, nous utilisons des commandes dans ce format :

${array-name[key]}

Nous pouvons utiliser echo pour envoyer la sortie à la fenêtre du terminal :

echo ${acronyms[ACK]}
echo ${acronyms[DHCP]}

Utiliser des boucles

Les tableaux se prêtent très bien à être utilisés dans des boucles. Les tableaux associatifs ne font pas exception. Les boucles fournissent des moyens efficaces d’invoquer une séquence d’actions sans sections de code répétitives. Avant d’examiner les boucles, il existe un moyen efficace de déclarer des tableaux.

Nous créons les tableaux en utilisant le declare commande (la même -A comme précédemment), mais nous fournissons les mots-clés et les valeurs sous forme de liste sur la ligne de commande.

declare -A countries=( [ALB]=Albania [BHR]=Bahrain [CMR]=Cameroon [DNK]=Denmark [EGY]=Egypt )

Le nom du tableau est « pays » et il est connecté à la liste de valeurs par un signe égal » =.  » La liste de valeurs est entourée de parenthèses « () » et chaque mot-clé est entouré de crochets « []« . Notez qu’il n’y a pas de virgules séparant les valeurs. Si vous avez une chaîne de valeur qui contient des espaces, vous devrez la placer entre guillemets.

Pour qu’un tableau associatif renvoie un mot-clé au lieu de la valeur, ajoutez un point d’exclamation « ! » devant le nom du tableau. Le symbole « @” peut être utilisé comme caractère générique, c’est-à-dire tous les éléments du tableau.

Cette for loop listera tous les mots-clés :

for key in "${!countries[@]}"; do echo $key; done

Notez que les mots-clés ne sont pas nécessairement répertoriés dans l’ordre dans lequel ils ont été créés, mais cela n’a pas d’importance. Les tableaux associatifs ne reposent pas sur un index ordonné.

Nous pouvons également utiliser l’expansion des paramètres pour répertorier tous les mots-clés. Ils seront répertoriés sur une ligne, pas un par ligne.

echo "${!countries[@]}"
echo "${!acronyms[@]}"

Nous pouvons augmenter notre for boucle pour imprimer les mots-clés et les valeurs en même temps.

for key in "${!acronyms[@]}"; do echo "$key - ${acronyms[$key]}"; done

Si nous voulons savoir combien d’éléments il y a dans les tableaux, nous pouvons utiliser un dièse « # » devant le nom du tableau au lieu d’un point d’exclamation.

echo "${!countries[@]}"
echo "${!acronyms[@]}"

Vérifier qu’un élément de tableau existe

Si vous recherchez un mot-clé mais qu’il n’y a pas d’élément de tableau de ce type, la valeur de retour sera une chaîne vide. Parfois, il est utile d’avoir un indicateur différent pour la présence ou l’absence d’un élément de tableau.

Nous pouvons vérifier la présence d’un élément de tableau en utilisant le « +_” opérateur. Notez que cela vient après le mot-clé, pas devant le nom du tableau comme les opérateurs précédents que nous avons vus.

if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi
if [ ${acronyms[FTP]+_} ]; then echo "Found"; else echo "Not found"; fi

L’élément de tableau avec le mot-clé « EOF » se trouve dans le tableau, mais l’élément de tableau avec le mot-clé « FTP » ne l’est pas.

Ajout d’éléments de tableau

L’ajout de nouveaux éléments à un tableau associatif est facile. Contrairement à certains langages de programmation, vous n’avez pas besoin de définir la taille de votre tableau lorsque vous le déclarez. Vous pouvez continuer à ajouter de nouveaux éléments sans atteindre une limite supérieure prédéfinie.

Pour ajouter un nouvel élément au tableau, nous utilisons le « +=” opérateur.

countries+=( [FJI]=Fiji )
echo "$(#countries[@]}"
echo ${countries[FJI]}

Le nombre d’éléments dans le tableau est désormais de six, et la recherche du nouveau mot-clé trouve l’élément du tableau et renvoie sa valeur.

Suppression d’éléments de tableau et de tableaux

Le unset La commande est utilisée pour supprimer les éléments du tableau. Si le mot-clé contient des espaces, placez-le entre guillemets.

unset acronyms[EOF]
if [ ${acronyms[EOF]+_} ]; then echo "Found"; else echo "Not found"; fi

Pour supprimer l’ensemble du tableau, utilisez unset avec le nom du tableau.

unset countries

Utilisation de variables avec des tableaux

L’utilisation de variables avec des tableaux associatifs est simple. Dans cet exemple, nous allons définir une clé de variable sur la chaîne « EOF ». Nous utiliserons la variable lorsque nous ajouterons un nouvel élément de tableau au tableau. En fait, nous remplaçons l’élément de tableau que nous avons supprimé précédemment.

Nous allons récupérer le nouvel élément du tableau en l’appelant avec le mot-clé new et aussi, en utilisant la variable. Si le mot-clé contient des espaces, vous devrez placer le nom de la variable entre guillemets.

key=EOF
acronyms[$key]="End of Frame"
echo ${acronyms[EOF]}
echo ${acronyms[$key]}

Faire preuve de créativité

Nos exemples ont été des collections d’informations où chaque élément du tableau est indépendant de tous les autres, un peu comme un dictionnaire. Chacun est une définition unique. Mais les tableaux associatifs peuvent tout aussi bien contenir une variété d’informations toutes liées à une seule chose, telles que les spécifications de différentes pièces de matériel informatique :

declare -A specification
specification[CPU]="Dual Core AMD Ryzen 5 3600"
specification[Speed]="3600 MHz"
specification[Kernel]="5.11.0-17-generic x86_64"
specification[Mem]="1978.5 MiB"
specification[Storage]="32 GiB"
specification[Shell]="Bash"
echo ${specification[CPU]}

Écrire efficacement dans une langue, c’est connaître les mécanismes et les structures qu’elle offre, et sélectionner celle qui convient le mieux au problème que vous essayez de résoudre. Les tableaux associatifs vous offrent un moyen facile à utiliser de stocker des données que vous pouvez rechercher par nom, tout comme un dictionnaire.

Laisser un commentaire

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

Tout ce que vous devez savoir sur Docker

Comment utiliser strace pour surveiller les appels système Linux

Comment utiliser strace pour surveiller les appels système Linux