GNU/Linux >> Tutoriels Linux >  >> Linux

Le tutoriel Ultimate Bash Array avec 15 exemples

Un tableau est une variable contenant plusieurs valeurs pouvant être de même type ou de type différent. Il n'y a pas de limite maximale à la taille d'un tableau, ni aucune exigence que les variables membres soient indexées ou affectées de manière contiguë. L'index du tableau commence par zéro.

Dans cet article, passons en revue 15 opérations de tableau différentes dans bash.

Cet article fait partie de la série de tutoriels Bash en cours. Pour ceux qui débutent avec les scripts bash, lancez-vous dans le didacticiel d'introduction aux scripts bash.

1. Déclarer un tableau et assigner des valeurs

En bash, le tableau est créé automatiquement lorsqu'une variable est utilisée au format comme,

name[index]=value
  • name est n'importe quel nom pour un tableau
  • index peut être n'importe quel nombre ou expression qui doit être évalué à un nombre supérieur ou égal à zéro. Vous pouvez déclarer un tableau explicite en utilisant declare -a arrayname.
$ cat arraymanip.sh
#! /bin/bash
Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${Unix[1]}

$./arraymanip.sh
Red hat

Pour accéder à un élément d'un tableau, utilisez des accolades comme ${name[index]}.

2. Initialiser un tableau lors de la déclaration

Au lieu d'initialiser chaque élément d'un tableau séparément, vous pouvez déclarer et initialiser un tableau en spécifiant la liste des éléments (séparés par un espace blanc) entre accolades.

Syntax:
declare -a arrayname=(element1 element2 element3)

Si les éléments ont le caractère d'espace blanc, placez-le entre guillemets.

#! /bin/bash
$cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');

declare -a déclare un tableau et tous les éléments entre parenthèses sont les éléments d'un tableau.

3. Imprimer l'ensemble du tableau Bash

Il existe différentes manières d'imprimer l'ensemble des éléments du tableau. Si le numéro d'index est @ ou *, tous les membres d'un tableau sont référencés. Vous pouvez parcourir les éléments du tableau et l'imprimer, en utilisant des instructions en boucle dans bash.

echo ${Unix[@]}

# Add the above echo statement into the arraymanip.sh
#./t.sh
Debian Red hat Ubuntu Suse

Faire référence au contenu d'une variable membre d'un tableau sans fournir de numéro d'index revient au même que faire référence au contenu du premier élément, celui référencé avec le numéro d'index zéro.

4. Longueur du tableau Bash

Nous pouvons obtenir la longueur d'un tableau en utilisant le paramètre spécial appelé $#.

${#arrayname[@]} vous donne la longueur du tableau.

$ cat arraymanip.sh
declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora');
echo ${#Unix[@]} #Number of elements in the array
echo ${#Unix}  #Number of characters in the first element of the array.i.e Debian
$./arraymanip.sh
4
6

5. Longueur du nième élément dans un tableau

${#arrayname[n]} doit donner la longueur du nième élément d'un tableau.

$cat arraymanip.sh
#! /bin/bash

Unix[0]='Debian'
Unix[1]='Red hat'
Unix[2]='Ubuntu'
Unix[3]='Suse'

echo ${#Unix[3]} # length of the element located at index 3 i.e Suse

$./arraymanip.sh
4

6. Extraction par décalage et longueur pour un tableau

L'exemple suivant montre comment extraire 2 éléments à partir de la position 3 d'un tableau appelé Unix.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[@]:3:2}

$./arraymanip.sh
Suse Fedora

L'exemple ci-dessus renvoie les éléments du 3ème index et du quatrième index. L'index commence toujours par zéro.

7. Extraction avec décalage et longueur, pour un élément particulier d'un tableau

Pour extraire uniquement les quatre premiers éléments d'un élément de tableau. Par exemple, Ubuntu qui est situé au deuxième index d'un tableau, vous pouvez utiliser le décalage et la longueur pour un élément particulier d'un tableau.

$cat arraymanip.sh
#! /bin/bash

Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
echo ${Unix[2]:0:4}

./arraymanip.sh
Ubun

L'exemple ci-dessus extrait les quatre premiers caractères du 2ème élément indexé d'un tableau.

8. Rechercher et remplacer dans un tableau des éléments

L'exemple suivant recherche Ubuntu dans un tableau d'éléments et le remplace par le mot "SCO Unix".

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

echo ${Unix[@]/Ubuntu/SCO Unix}

$./arraymanip.sh
Debian Red hat SCO Unix Suse Fedora UTS OpenLinux

Dans cet exemple, il remplace l'élément du 2ème index "Ubuntu" par "SCO Unix". Mais cet exemple ne remplacera pas définitivement le contenu du tableau.

9. Ajouter un élément à un tableau Bash existant

L'exemple suivant montre comment ajouter un élément au tableau existant.

$cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Unix=("${Unix[@]}" "AIX" "HP-UX")
echo ${Unix[7]}

$./arraymanip.sh
AIX

Dans le tableau appelé Unix, les éléments 'AIX' et 'HP-UX' sont ajoutés respectivement en 7ème et 8ème index.

10. Supprimer un élément d'un tableau

unset est utilisé pour supprimer un élément d'un tableau.unset aura le même effet que l'affectation de null à un élément.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');

unset Unix[3]
echo ${Unix[3]}

Le script ci-dessus imprimera simplement null qui est la valeur disponible dans le 3ème index. L'exemple suivant montre l'une des façons de supprimer complètement un élément d'un tableau.

$ cat arraymanip.sh
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
pos=3
Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))})
echo ${Unix[@]}

$./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

Dans cet exemple, ${Unix[@]:0:$pos} vous donnera 3 éléments à partir du 0ème index c'est-à-dire 0,1,2 et ${Unix[@]:4} donnera les éléments du 4ème index au dernier indice. Et fusionnez les deux sorties ci-dessus. C'est l'une des solutions de contournement pour supprimer un élément d'un tableau.

11. Supprimer les éléments du tableau Bash à l'aide de modèles

Dans la condition de recherche, vous pouvez donner les motifs et stocker l'élément restant dans un autre tableau, comme indiqué ci-dessous.

$ cat arraymanip.sh
#!/bin/bash
declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora');
declare -a patter=( ${Unix[@]/Red*/} )
echo ${patter[@]}

$ ./arraymanip.sh
Debian Ubuntu Suse Fedora

L'exemple ci-dessus supprime les éléments qui ont le motif Red*.

12. Copier un tableau

Développez les éléments du tableau et stockez-les dans un nouveau tableau, comme indiqué ci-dessous.

#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Linux=("${Unix[@]}")
echo ${Linux[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Fedora UTS OpenLinux

13. Concaténation de deux tableaux Bash

Développez les éléments des deux tableaux et affectez-le au nouveau tableau.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
echo ${UnixShell[@]}
echo ${#UnixShell[@]}

$ ./arraymanip.sh
Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh
14

Il imprime le tableau qui contient les éléments du tableau "Unix" et "Shell", et le nombre d'éléments du nouveau tableau est de 14.

14. Suppression d'un tableau entier

unset est utilisé pour supprimer un tableau entier.

$cat arraymanip.sh
#!/bin/bash
Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux');
Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh');

UnixShell=("${Unix[@]}" "${Shell[@]}")
unset UnixShell
echo ${#UnixShell[@]}

$ ./arraymanip.sh
0

Après la désactivation d'un tableau, sa longueur serait égale à zéro, comme indiqué ci-dessus.

15. Charger le contenu d'un fichier dans un tableau

Vous pouvez charger le contenu du fichier ligne par ligne dans un tableau.

#Example file
$ cat logfile
Welcome
to
thegeekstuff
Linux
Unix

$ cat loadcontent.sh
#!/bin/bash
filecontent=( `cat "logfile" `)

for t in "${filecontent[@]}"
do
echo $t
done
echo "Read file content!"

$ ./loadcontent.sh
Welcome
to
thegeekstuff
Linux
Unix
Read file content!

Dans l'exemple ci-dessus, chaque index d'un élément de tableau a été imprimé dans la boucle for.

Lecture recommandée

Bash 101 Hacks, par Ramesh Natarajan . Je passe la plupart de mon temps sur l'environnement Linux. Donc, naturellement, je suis un grand fan de la ligne de commande Bash et des scripts shell. Il y a 15 ans, lorsque je travaillais sur différentes versions de *nix, j'écrivais beaucoup de code sur le shell C et le shell Korn. Des années plus tard, lorsque j'ai commencé à travailler sur Linux en tant qu'administrateur système, j'ai pratiquement automatisé toutes les tâches possibles à l'aide de scripts shell Bash. Sur la base de mon expérience avec Bash, j'ai écrit le livre électronique Bash 101 Hacks qui contient 101 exemples pratiques sur la ligne de commande Bash et les scripts shell. Si vous songez à maîtriser Bash, rendez-vous service et lisez ce livre, qui vous aidera à prendre le contrôle de votre ligne de commande Bash et de vos scripts shell.


Linux
  1. Le didacticiel de commande Numfmt avec des exemples pour les débutants

  2. Le didacticiel de commande de type avec des exemples pour les débutants

  3. Le didacticiel de commande Shuf avec des exemples pour les débutants

  4. Tableaux bash avec exemples

  5. '&&' vs '&' avec la commande 'test' dans Bash

Bash Scripting - Tableau associatif expliqué avec des exemples

Bash Scripting - Tableau indexé expliqué avec des exemples

Le guide de téléchargement ultime de Wget avec 15 exemples impressionnants

Le didacticiel Ultimate Tar Command avec 10 exemples pratiques

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques

HowTo:Le didacticiel de commande ultime Logrotate avec 10 exemples