Les tableaux à la rescousse !
Jusqu'à présent, vous avez utilisé un nombre limité de variables dans votre script bash, vous avez créé quelques variables pour contenir un ou deux noms de fichiers et noms d'utilisateur.
Mais que se passe-t-il si vous avez besoin de plus que quelques variables dans vos scripts bash ? disons que vous voulez créer un script bash qui lit une centaine d'entrées différentes d'un utilisateur, allez-vous créer 100 variables ?
Heureusement, vous n'en avez pas besoin, car les baies offrent une bien meilleure solution.
Création de votre premier tableau dans un script bash
Supposons que vous souhaitiez créer un script bash timestamp.sh qui met à jour l'horodatage de cinq fichiers différents.
Tout d'abord, utilisez l'approche naïve consistant à utiliser cinq variables différentes :
#!/bin/bash
file1="f1.txt"
file2="f2.txt"
file3="f3.txt"
file4="f4.txt"
file5="f5.txt"
touch $file1
touch $file2
touch $file3
touch $file4
touch $file5
Maintenant, au lieu d'utiliser cinq variables pour stocker la valeur des cinq noms de fichiers, vous créez un tableau contenant tous les noms de fichiers, voici la syntaxe générale d'un tableau en bash :
array_name=(value1 value2 value3 … )
Vous pouvez donc maintenant créer un tableau nommé files qui stocke les cinq noms de fichiers que vous avez utilisés dans timestamp.sh script comme suit :
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
Comme vous pouvez le voir, c'est beaucoup plus propre et efficace car vous avez remplacé cinq variables par un seul tableau !
Accéder aux éléments du tableau dans bash
Le premier élément d'un tableau commence à l'index 0
et donc pour accéder au nième élément du tableau vous utilisez le n -1
indice.
Par exemple, pour imprimer la valeur de l'élément 2 de votre tableau files, vous pouvez utiliser l'instruction echo suivante :
echo ${files[1]}
et pour imprimer la valeur du 3 élément de votre tableau files, vous pouvez utiliser :
echo ${files[2]}
et ainsi de suite.
Le script bash suivant reverse.sh imprimerait les cinq valeurs de votre tableau de fichiers dans l'ordre inverse, en commençant par le dernier élément du tableau :
#!/bin/bash
files=("f1.txt" "f2.txt" "f3.txt" "f4.txt" "f5.txt")
echo ${files[4]}
echo ${files[3]}
echo ${files[2]}
echo ${files[1]}
echo ${files[0]}
Je sais que vous vous demandez peut-être pourquoi tant d'instructions d'écho et pourquoi je n'utilise pas de boucle ici. C'est parce que j'ai l'intention d'introduire les concepts de boucle bash plus tard dans cette série .
Vous pouvez également imprimer tous les éléments du tableau en une seule fois :
echo ${files[*]}
f1.txt f2.txt f3.txt f4.txt f5.txt
Vous pouvez imprimer le nombre total d'éléments du tableau des fichiers, c'est-à-dire la taille du tableau :
echo ${#files[@]}
5
Vous pouvez également mettre à jour la valeur de n'importe quel élément d'un tableau ; par exemple, vous pouvez changer la valeur du premier élément du tableau files en "a.txt" en utilisant l'affectation suivante :
files[0]="a.txt"
Ajout d'éléments de tableau dans bash
Créons un tableau contenant le nom des distributions Linux populaires :
distros=("Ubuntu" "Red Hat" "Fedora")
Le tableau de distributions actuel contient trois éléments. Vous pouvez utiliser le +=
opérateur pour ajouter (append) un élément à la fin du tableau.
Par exemple, vous pouvez ajouter Kali au tableau distributions comme suit :
distros+=("Kali")
Maintenant, le tableau des distributions contient exactement quatre éléments de tableau, Kali étant le dernier élément du tableau.
Suppression d'éléments de tableau dans bash
Commençons par créer un tableau num qui stockera les nombres de 1 à 5 :
num=(1 2 3 4 5)
Vous pouvez imprimer toutes les valeurs du tableau num :
echo ${num[*]}
1 2 3 4 5
Vous pouvez supprimer le 3element du tableau num en utilisant le unset
shell intégré :
unset num[2]
Maintenant, si vous imprimez toutes les valeurs du tableau num :
echo ${num[*]}
1 2 4 5
Comme vous pouvez le voir, le troisième élément du tableau num a été supprimé.
Vous pouvez également supprimer tout le tableau num de la même manière :
unset num
Créer des tableaux hybrides avec différents types de données
Dans bash, contrairement à de nombreux autres langages de programmation, vous pouvez créer un tableau contenant différents types de données. Jetez un œil au fichier user.sh suivant script bash :
#!/bin/bash
user=("john" 122 "sudo,developers" "bash")
echo "User Name: ${user[0]}"
echo "User ID: ${user[1]}"
echo "User Groups: ${user[2]}"
echo "User Shell: ${user[3]}"
Notez que le tableau utilisateur contient quatre éléments :
- "John" ----> Type de données chaîne
- 122 ---> Type de données entier
- "sudo,developers" ---> Type de données chaîne
- "bash" ---> Type de données de chaîne
Il est donc tout à fait acceptable de stocker différents types de données dans le même tableau. N'est-ce pas génial ?
Cela nous amène à la fin de ce didacticiel; J'espère que tu as aimé! Si vous voulez quelque chose de plus compliqué et d'exemple concret, découvrez comment diviser des chaînes dans bash à l'aide de tableaux.
Et bien sûr, vous pouvez mettre en pratique ce que vous venez d'apprendre en résolvant les problèmes et vous référer à leurs solutions si vous êtes bloqué ou avez besoin d'un indice.
Bash Chapter 4 Practice QuestionsProblems and their solution to practice Bash arraysBash-Chapter-4-Practice-Questions-Linux-Handbook.pdf29 KB
Dans le chapitre suivant, je vais vous montrer comment utiliser divers opérateurs arithmétiques bash.
Chargement...