Tag vite :

Tableaux en shell bash

 Posté par greg le 5 juin 2010 11:30 |  Les commentaires sont désactivés pour ce post.
Tags : geek  computing  shell 

Il y a quelques articles bien pratiques que j’ai envie de ramener de geekblog, celui-ci en fait partie.

Découverte

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:~/$ _

Parcourir un tableau

 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 !

Liens récents 

 Crew - code review for Git projects.

Marqué par greg le 6 mai 2012 07:57..
Tags: geek computing git

Suivre le lien

 responsive grid system

Marqué par greg le 5 mai 2012 12:38..
Tags: geek computing dev

Suivre le lien

 Vim "improved

Marqué par greg le 8 mars 2012 09:26..
Tags: geek computing vim

Suivre le lien

 Highly scalable NoSql blog

Marqué par greg le 3 mars 2012 09:12..
Tags: geek computing dev

Suivre le lien

 Bruce Momjian Pg blog

Marqué par greg le 16 février 2012 13:51..
Tags: geek computing postgresql net blog

Suivre le lien

 Richard Miller's blog

Marqué par greg le 16 février 2012 09:57..
Tags: geek computing dev php symfony net blog

Suivre le lien

 Online SQL explain interface

Marqué par greg le 15 février 2012 09:58..
Tags: geek computing postgresql net

Suivre le lien

 Ace online code editor

Marqué par greg le 15 février 2012 08:57..
Tags: net geek computing dev javascript

Suivre le lien

 Coding horror

Marqué par greg le 14 février 2012 12:42..
Tags: geek computing dev net blog

Suivre le lien

 telegraphCQ - Stream oriented database

Marqué par greg le 13 février 2012 14:44..
Tags: geek computing postgresql

Suivre le lien