Les dictionnaires Bash vous donnent des cartes de hasch et des tableaux associatifs dans des scripts de Shell Linux. Nous allons vous montrer comment utiliser ces structures de données puissantes et utiles dans vos propres scripts de shell Linux.
Une rose par tout autre nom
Le nom formel des dictionnaires est des tableaux associatifs. Ils sont également appelés tables de hachage et cartes de hash. Ils sont une structure de données qui fonctionne de la même manière à un tableau régulier, mais avec une différence significative.
Un tableau est une collection de valeurs de données détenues 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 la matrice est connue comme son index, de sorte que ces types de tableaux sont appelés tableaux indexés. Ils sont les types de tableaux les plus couramment utilisés.
Cependant, ils ont un inconvénient. Comment accédez-vous à un élément de tableau si vous ne connaissez pas sa position dans la liste? Vous devez passer à travers tous les éléments de la matrice, tester pour voir si la valeur à cet emplacement est celle que vous recherchez.
Les matrices associatives surmontent ce problème. Ils n'utilisent pas d'entiers pour identifier de manière unique des éléments de tableau. Ils utilisent des mots uniques appelés mots-clés. Vous pouvez récupérer la valeur d'un élément de tableau à l'aide de son mot-clé, quel que soit l'endroit où il est positionné dans la matrice. Avec une matrice indexée, les nombres entiers représentant les positions dans le tableau sont en ordre croissant. Les mots-clés d'un tableau associatif peuvent être dans n'importe quel ordre.
Vous pouvez rechercher une valeur dans un tableau associatif en recherchant avec son mot-clé. Regardant un mot et récupérant sa valeur associée imitat à la recherche d'un mot dans un dictionnaire et à trouver sa signification. C'est pourquoi les matrices associatives sont appelées dictionnaires.
Bash 4.0 ou plus
Les tableaux associatifs sont pris en charge dans la coquille bash version 4.0 ou supérieure. Si vous utilisez une distribution de Linux en cours, vous devriez aller bien. Pour vérifier votre version Bash, utilisez cette commande:
Bash -Version
La machine utilisée pour rechercher cet article a installé Bash 5.1.4, nous sommes donc bon d'y aller.
Principes de base
Pour créer une matrice associative sur la ligne de commande terminale ou dans un script, nous utilisons la commande Bash Déclare. Les
-UNE
L'option (associative) indique à BASH que ce sera une matrice associative et non un tableau indexé.
Déclarez -a acronymes
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:
Nom du tableau [clé] = valeur
Ajoutons quelques éléments de tableau:
acronymes [ack] = accusé de réception
acronymes [BGP] = "Protocole de la passerelle frontalière"
acronymes [CIDR] = "Routage inter-Domain sans classe"
acronymes [DHCP] = "protocole de configuration d'hôte dynamique"
acronymes [eof] = "fin du cadre"
Ces commandes définissent cinq éléments de matrice. Notez que les valeurs sont enveloppées de guillemets s'il y a des espaces dans la valeur. Nos mots-clés ont été entrés dans l'ordre alphabétique, mais ils peuvent être entrés dans n'importe quel ordre. 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 écraserez le premier. Vous n'aurez toujours qu'une entrée avec ce mot-clé et il sera associé à la deuxième valeur que vous avez ajoutée.
Pour récupérer des valeurs de la matrice, nous utilisons des commandes dans ce format:
$ {nom de tableau [clé]}
Nous pouvons utiliser ECHO pour envoyer la sortie à la fenêtre du terminal:
echo $ {acronymes [ack]}
echo $ {acronymes [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 de regarder des boucles, il existe un moyen efficace de déclarer des tableaux.
Nous créons les tableaux en utilisant le
déclarer
commande (la même chose
-UNE
Option comme avant), mais nous fournissons les mots-clés et les valeurs comme une liste de la ligne de commande.
Déclarez -a pays = ([[Alb] = Albanie [BHR] = Bahreïn [cmr] = Cameroun [DNK] = Danemark [egy] = Egypte)
Le nom de la matrice est "Pays" et il est connecté à la liste de valeurs par un signe égal "
À
. " La liste de valeurs est enveloppée entre parenthèses "
()
"Et chaque mot clé est enveloppé entre crochets"
[]
". Notez qu'il n'y a pas de virgule séparant les valeurs. Si vous avez une chaîne de valeur contenant des espaces, vous devez l'envelopper de guillemets.
Pour rendre un tableau associatif retourner un mot-clé au lieu de la valeur, ajoutez un point d'exclamation "
!
"Devant le nom de la matrice. Le symbole "
@
"Peut être utilisé comme générique de caractères génériques, ce qui signifie tous les éléments de tableau.
Cette
pour
La boucle va répertorier tous les mots-clés:
pour la clé dans "$ {! Pays [@]}"; faire écho $ clé; fait
Notez que les mots-clés ne sont pas nécessairement répertoriés dans l'ordre qu'ils ont été créés, mais cela n'a pas d'importance. Les tableaux associatifs ne s'appuient pas sur un index commandé.
Nous pouvons également utiliser l'expansion des paramètres pour répertorier tous les mots-clés. Ils seront inscrits sur une ligne, pas une seule par ligne.
Echo "$ {! Pays [@]}"
echo "$ {! Acronymes [@]}"
Nous pouvons augmenter notre
pour
boucle pour imprimer les mots-clés et les valeurs en même temps.
pour la clé dans "$ {! Acronymes [@]}"; do echo "$ clé - $ {acronymes [$ clé]}"; fait
Si nous voulons savoir combien d'éléments il y a dans les tableaux, nous pouvons utiliser un hasch "#" devant le nom de la matrice au lieu d'un point d'exclamation.
Echo "$ {! Pays [@]}"
echo "$ {! Acronymes [@]}"
Vérification d'un élément de tableau existant
Si vous recherchez un mot clé, mais 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 matrice.
Nous pouvons vérifier la présence d'un élément de matrice en utilisant le "
+ _
"Opérateur. Notez que cela vient après le mot-clé, pas devant le nom de la matrice comme les opérateurs précédents que nous avons vus.
Si [$ {acronymes [eof] + _}]; puis echo "trouvé"; sinon echo "non trouvé"; fi
Si [$ {acronymes [FTP] + _}]; puis echo "trouvé"; sinon echo "non trouvé"; fi
L'élément de tableau avec le mot-clé "EOF" se trouve dans la matrice, mais l'élément de tableau avec le mot-clé "FTP" n'est pas.
Ajout d'éléments de tableau
L'ajout de nouveaux éléments à un tableau associatif est facile. Contrairement à certaines langages de programmation, vous n'avez pas besoin de définir la taille de votre matrice lorsque vous le déclarez. Vous pouvez continuer à ajouter de nouveaux éléments sans frapper une limite supérieure prédéfinie.
Pour ajouter un nouvel élément à la matrice, nous utilisons le "
+ =
"Opérateur.
Pays + = ([Fji] = Fidji)
ECHO "$ (Nombre de pays [@]}"
echo $ {pays [fji]}
Le nombre d'éléments de la matrice est maintenant de six ans et la recherche du nouveau mot-clé trouve l'élément de tableau et renvoie sa valeur.
Supprimer des éléments de matrice et des tableaux
Les
non défini
La commande est utilisée pour supprimer les éléments de réseau. Si le mot clé a des espaces dedans, enveloppez-le dans des guillemets.
Les acronymes non définis [EOF]
Si [$ {acronymes [eof] + _}]; puis echo "trouvé"; sinon echo "non trouvé"; fi
Pour supprimer l'ensemble de la matrice, utilisez
non défini
avec le nom de la matrice.
Pays non définis
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 ajoutons un nouvel élément de tableau à la matrice. 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 de tableau en l'appelant avec le nouveau mot-clé et également en utilisant la variable. Si le mot clé contient des espaces, vous devrez envelopper le nom de la variable entre guillemets.
Touche = EOF
acronymes [$ clé] = "fin du cadre"
echo $ {acronymes [eof]}
echo $ {acronymes [$ clé]}
Faire preuve de créativité
Nos exemples ont été des collections d'informations où chaque élément de 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 facilement détenir une variété d'informations toutes liées à une chose, telles que les spécifications de différents morceaux de matériel informatique:
DÉCLARE-SPÉCIFICATION
Spécification [CPU] = "Dual Core AMD Ryzen 5 3600"
Spécification [Speed] = "3600 MHz"
Spécification [noyau] = "5.11.0-17-générique x86_64"
Spécification [MEM] = "1978.5 MIB"
Spécification [Stockage] = "32 gib"
Spécification [Shell] = "Bash"
Echo $ {Spécification [CPU]}
L'écriture efficace dans une langue signifie connaître les mécanismes et les structures qu'il offre et en sélectionnant le plus approprié pour le problème que vous essayez de résoudre. Les tableaux associatifs vous donnent une manière facile à utiliser de stocker des données que vous pouvez rechercher par nom, comme un dictionnaire.