Bash : Paramètres de position
Généralités
Les paramètres de positions sont définis par un seul chiffre, et il y'a deux manières de leur assigner une valeur :
- soit par la commande interne set
- soit en les passant en arguments sur la ligne de commandes lors de l'appel du script.
Attention, on ne peut pas utiliser = ou read pour leur affecter une valeur.
L'affectation
Avec set
La commande set affecte ses propres paramètres aux paramètre de position correspondants.
BASH $> set val1 val2 val3 val4 BASH $> echo $1 val1 BASH $> echo $2 val2 BASH $> echo $3 val3 BASH $> echo $4 val4 BASH $>
Attention, tout appel à set réinitialise entièrement la liste des paramètres. Pour vider toutes les valeurs des paramètres, on peut utiliser set --
.
Par passage d'arguments
Lors de l'appel d'un script en BASH, les paramètres de position sont utilisés pour accéder aux valeurs des arguments qui ont été passé lors de son appel. Comme pour la commande set, le script suivant affectera le paramètre 1 à la position 1, le paramètre 2 à la position 2, le paramètre 3 à la position 3 et le paramètre 4 à la position 4.
#!/bin/bash # Affichage des 4 premiers paramètres echo "Valeur de \$1 vaut : $1" echo "Valeur de \$2 vaut : $2" echo "Valeur de \$3 vaut : $3" echo "Valeur de \$4 vaut : $4"
Compléments
Paramètres de positions spéciaux
- $0 : Donne le nom du programme appelant
- $# : Donne le nombre de paramètres de position ayant une valeur
- $* : Produit une chaîne avec tous les paramètres de position.
- $@ : Produit une chaîne pour chaque paramètre de position.
Décalage de numérotation
La commande shift permet de décaler la numérotation des paramètres de position ayant une valeur. La valeur du 1er est remplacée par celle du 2e, celle du 2e par celle du 3e, etc.
#!/bin/bash # Boucle qui va afficher les 4 premiers paramètres # et qui va décaler la numérotation while [ $# -ge 1 ]; do # On affiche les 4 premiers paramètres echo "Position 1 vaut $1" echo "Position 2 vaut $2" echo "Position 3 vaut $3" echo "Position 4 vaut $4" echo "~~~~~~~~" # On décalage la numérotation de 1 shift 1 done
Passer des arguments par lot à une commande
On peut passer les arguments à une commande par lots, avec des des accolades: <source lang="bash"> root@lfshost:~/patches# echo {$HOME,$LFS} /root /mnt/lfs
- Ici, les arguments passés ont une effet sur le shell actuel; cet effet reste.
- De la même façon, en passant des variables d'nevironnement, le système peut les lire
</source>