Outils pour utilisateurs

Outils du site


tuto:linux:bash_-_les_tableaux

Tableaux

Moins utilisés que les chaînes de caractères ou les entiers, bash intègre également les tableaux monodimensionnels.

1. Définition et initialisation d’un tableau

Pour créer un tableau, on utilise généralement l'option -a (comme array) de la commande interne declare :

        declare -a nomtab ...

Le tableau nomtab est simplement créé mais ne contient aucune valeur : le tableau est défini mais n'est pas initialisé.

  • Pour connaître les tableaux définis : declare -a
    $ declare -a
    declare -a BASH_ARGC='()'
    declare -a BASH_ARGV='()'
    declare -a BASH_LINENO='()'
    declare -a BASH_SOURCE='()'
    declare -ar BASH_VERSINFO='([0]="3" [1]="1" [2]="17" [3]="1" [4]="release" [5]="i486-pc-linux-gnu")'
    declare -a DIRSTACK='()'
    declare -a FUNCNAME='()'
    declare -a GROUPS='()'
    declare -a PIPESTATUS='([0]="0")'
  • Pour définir et initialiser un tableau : declare -a nomtab=( val0 val1 …)

Comme en langage C, l'indice d'un tableau débute toujours à 0 et sa valeur maximale est celle du plus grand entier positif représentable dans ce langage (bash a été écrit en C). L'indice peut être une expression arithmétique.

  • Pour désigner un élément d'un tableau, on utilise la syntaxe : nomtab[indice]
    $ declare -a tab => définition du tableau tab
    $
    $ read tab[1] tab[3]
    coucou bonjour
    $
    $ tab[0]=hello

Il n'est pas obligatoire d’utiliser la commande interne declare pour créer un tableau, il suffit d'initialiser un de ses éléments :

$ array[3]=bonsoir   => création du tableau array avec
$                    => initialisation de l’élément d’indice 3

Trois autres syntaxes sont également utilisables pour initialiser globalement un tableau :

  • nomtab=( val0 val1 … )
  • nomtab=( [indice]=val … )
    $ arr=([1]=coucou [3]=hello)
  • l'option -a de la commande interne read ou readonly :
    $ read -a tabmess
    bonjour tout le monde

2. Valeur d'un élément d'un tableau

On obtient la valeur d'un élément d'un tableau à l’aide la syntaxe : ${nomtab[indice]}

bash calcule d'abord la valeur de l'indice puis l'élément du tableau est remplacé par sa valeur.

$ echo ${tabmess[1]}
tout
$
$ echo ${tabmess[RANDOM%4]} # ou bien ${tabmess[$((RANDOM%4))]}
monde
$
$ echo ${tabmess[1**2+1]}
le

Pour obtenir la longueur d'un élément d'un tableau : ${#nomtab[indice]}

$ echo ${tabmess[0]}
bonjour
$
$ echo ${#tabmess[0]}
7   => longueur de la chaîne bonjour

Lorsqu'un tableau sans indice est présent dans une chaîne de caractères ou une expression, bash utilise l'élément d'indice 0.

$ echo $tabmess
bonjour

Réciproquement, une variable non préalablement définie comme tableau peut être interprétée comme un tableau.

$ var=bonjour
$ echo ${var[0]}     => var est interprétée comme un tableau à un seul élément
bonjour              => d’indice 0
$ var=( coucou ${var[0]} )
$ echo ${var[1]}     => var est devenu un véritable tableau
bonjour

3. Caractéristiques d'un tableau

Le nombre d'éléments d'un tableau est désigné par : ${#nomtab[*]}

Seuls les éléments initialisés sont comptés.

$ echo ${#arr[*]}
2

Tous les éléments d'un tableau sont accessibles à l’aide de la notation : ${nomtab[*]}

Seuls les éléments initialisés sont affichés.

$ echo ${arr[*]}
coucou hello

Pour obtenir la liste de tous les indices conduisant à un élément défini d’un tableau, on utilise la syntaxe : ${!nomtab[*]}

$ arr=([1]=coucou bonjour [5]=hello)
$
$ echo ${!arr[*]}
1 2 5

L’intérêt d’utiliser cette syntaxe est qu’elle permet de ne traiter que les éléments définis d’un tableau « à trous ».

$ for i in ${!arr[*]}
> do
>   echo "$i  => ${arr[i]}" => dans l’expression ${arr[i]}, bash interprète
> done   => directement i comme un entier
1  => coucou
2  => bonjour
5  => hello

Pour ajouter un élément val à un tableau tab :

  • à la fin : tab[${#tab[*]}]=val
  • en tête : tab=( val ${tab[*]} )
$ tab=( un deux trois )
$ echo ${#tab[*]}
3
$ tab[${#tab[*]}]=fin      =>ajout en fin de tableau
$ echo ${tab[*]}
un deux trois fin
$ tab=( debut ${tab[*]} )  =>ajout en tête de tableau
$ echo ${tab[*]}
debut un deux trois fin

Si l’on souhaite créer un tableau d’entiers on utilise la commande declare –ai. L’ordre des options n’a aucune importance.

$ declare –ai tabent=( 2 45 -2 )

Pour créer un tableau en lecture seule, on utilise les options –ra :

$ declare -ra tabconst=( bonjour coucou salut )    => tableau en lecture seule
$
$ tabconst[1]=ciao
-bash: tabconst: readonly variable
$
$ declare -air tabInt=( 34 56 )   => tableau (d’entiers) en lecture seule
$ echo $(( tabInt[1] +10 ))
66
$ (( tabInt[1] += 10 ))
-bash: tabInt: readonly variable

4. Suppression d'un tableau

Pour supprimer un tableau ou élément d'un tableau, on utilise la commande interne unset.

  • Suppression d'un tableau : unset nomtab …
  • Suppression d'un élément d'un tableau : unset nomtab[indice] …
tuto/linux/bash_-_les_tableaux.txt · Dernière modification : 2010/01/24 21:14 de root