Bash : Paramètres de position

De Justine's wiki
Aller à la navigation Aller à la recherche

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

  1. Ici, les arguments passés ont une effet sur le shell actuel; cet effet reste.
  2. De la même façon, en passant des variables d'nevironnement, le système peut les lire

</source>