Quantcast

Vendredi 6 avril 5 06 /04 /Avr 14:51
Bonjour à tous,
Désolé de ne pas être très assidu au blog en ce moment, j'ai en ce beau printemps pas mal d'occupations prenantes autre que de geeker ;o)

Je vais néanmoins vous concocter un petit article pratique pour ceux qui aiment faire des scripts pour tout automatiser. Créer et parcourir des tableaux en shell.

greg@localhost:~/$ mon_tableau=(un deux trois quatre);
greg@localhost:~/$ echo $mon_tableau
un
greg@localhost:~/$ echo ${mon_tableau[0]}
un
greg@localhost:~/$ echo ${mon_tableau[1]}
deux
greg@localhost:~/$ echo ${mon_tableau[*]}
un deux trois quatre
greg@localhost:~/$ echo ${mon_tableau[@]}
un deux trois quatre
greg@localhost:~/$ echo ${!mon_tableau[*]}
0 1 2 3
greg@localhost:~/$ echo ${#mon_tableau[@]}
4

On peut remarquer plusieurs choses utiles :
- afficher la variable du tableau retourne la valeur du premier élément du tableau.
- on affiche les différents éléments à partir de leur index dans le tableau, le shell ne permet donc pas de créer des «hash» ou tableaux associatifs.
- Il existe deux manières de récupérer le nombre d'éléments d'un tableau ou ses index avec les cactères spéciaux «*» et/ou «@». Nous verrons en quoi ces 2 caractères sont différents un peu plus loin.

Ajouter, effacer des valeurs d'un tableau:
greg@localhost:~/$ mon_tableau[5]=six
greg@localhost:~/$ echo ${!mon_tableau[*]}
0 1 2 3 5
greg@localhost:~/$ unset mon_tableau[0]
greg@localhost:~/$ echo $mon_tableau

greg@localhost:~/$ echo ${!mon_tableau[*]}
1 2 3 5
greg@localhost:~/$ unset mon_tableau
greg@localhost:~/$ echo ${!mon_tableau[*]}

greg@localhost:~/$ _


Il existe  deux moyens faciles de parcourir les tableaux en shell avec un for :

greg@localhost:~/$ for index in "${!mon_tableau[@]}"; do echo ${mon_tableau[$index]}; done
un
deux
trois
quatre
greg@localhost:~/$ for elt in "${mon_tableau[@]}"; do echo $elt;done
un
deux
trois
quatre
greg@localhost:~/$ for elt in "${mon_tableau[*]}"; do echo $elt;done
un deux trois quatre

Et là, nous voyons bien la différence entre le «*» et le «@». L'arobase nous retourne la liste des éléments du tableau alors que le «*» nous retourne le contenu du tableau dans une seule chaîne. Pour calculer les indexes et le nombre d'élements d'un tableau, cela ne fais pas vraiment de différence mais dès qu'il s'agit de parcourir le tableau la différence est de taille.

Un tableau particulier : $
Ce tableau est un tableau spécial du shell, il contient les paramètres passés au shell courant. Nous pouvons ainsi facilement capter des modifieurs passés en arguments au script pour influer sur son comportement.

Imaginons le script script.sh qui contient le texte suivant :
#!/bin/bash
for arg in "$@"
do
  echo $arg
done

Rendons le exécutable et lançons le :
greg@localhost:~/$ chmod +x script.sh
greg@localhost:~/$ ./script.sh
greg@localhost:~/$ ./script.sh un deux trois
un
deux
trois

Changeons maintenant notre code en remplaçant le «@» par «*». Notre script devient :
#!/bin/bash
for arg in "$*"
do
  echo $arg
done


Lançons le:
greg@localhost:~/$ ./script.sh un deux trois
un deux trois

Voila ... bon week end !
Par greg - Publié dans : geekblog
Ecrire un commentaire - Voir les 3 commentaires
Retour à l'accueil
 
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés