GNU/Linux >> Tutoriels Linux >  >> Linux

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

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 :

  1. "John" ----> Type de données chaîne
  2. 122 --->  Type de données entier
  3. "sudo,developers" ---> Type de données chaîne
  4. "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...
Linux
  1. Utilisation d'une référence à une variable de chaîne Bash dans Sed ?

  2. Bash Beginner Series #9 :Utiliser des fonctions dans Bash

  3. Bash Beginner Series #8 :Boucles dans Bash

  4. Tableau dans Bash introuvable

  5. Supprimer les espaces blancs dans chaque début de ligne de fichier, en utilisant bash

Bash Beginner Series #1 :Créez et exécutez votre premier script shell Bash

Bash Beginner Series #5 :Utilisation des opérateurs arithmétiques dans les scripts Bash

Bash Beginner Series #3 :Passer des arguments aux scripts Bash

Bash Beginner Series #7 :Prise de décision avec des instructions If Else et Case Statements

Bash Beginner Series #6 :Opérations sur les chaînes dans Bash

Bash Beginner Series #10 :Automatisation avec Bash