<Précédent | Table des matières | Suivant>
shift - Accéder à de nombreux arguments
Mais que se passe-t-il quand on donne au programme un grand nombre d'arguments comme celui-ci :
[moi@linuxbox ~]$ pos-param *
Nombre d'arguments : 82
$0 = /home/moi/bin/posit-param
$1 = adresses.ldif
$2 = bac
$3 = signets.html
4 $ = debian-500-i386-netinst.iso
5 $ = debian-500-i386-netinst.jigdo
6 $ = debian-500-i386-netinst.template
$7 = debian-cd_info.tar.gz
8 $ = ordinateur de bureau
$9 = répertoire-bin.txt
8 $ = ordinateur de bureau
$9 = répertoire-bin.txt
Sur cet exemple de système, le caractère générique * se développe en 82 arguments. Comment pouvons-nous en traiter autant ? Le shell fournit une méthode, bien que maladroite, pour ce faire. Les décalage La commande fait « descendre d'un » tous les paramètres à chaque exécution. En effet, en utilisant décalage, il est possible de se débrouiller avec un seul paramètre (en plus de $0, qui ne change jamais):
#! / Bin / bash
# posit-param2 : script pour afficher tous les arguments count=1
while [[ $# -gt 0 ]] ; faire
echo "Argument $count = $1" count=$((count + 1))
décalage fait
#! / Bin / bash
# posit-param2 : script pour afficher tous les arguments count=1
while [[ $# -gt 0 ]] ; faire
echo "Argument $count = $1" count=$((count + 1))
décalage fait
Chaque fois décalage est exécuté, la valeur de $2 est déplacé vers $1, la valeur de $3 est déplacé vers $2 etc. La valeur de $# est également réduit de un.
Dans le pos-param2 programme, nous créons une boucle qui évalue le nombre d'arguments restants et continue tant qu'il y en a au moins un. On affiche l'argument courant, on incrémente la variable compter à chaque itération de la boucle pour fournir un compte courant du nombre d'arguments traités et, enfin, exécuter un décalage charger
$1 avec l'argument suivant. Voici le programme au travail :
[moi@linuxbox ~]$ posit-param2 abcd
Argument 1 = a Argument 2 = b Argument 3 = c Argument 4 = d
[moi@linuxbox ~]$ posit-param2 abcd
Argument 1 = a Argument 2 = b Argument 3 = c Argument 4 = d