Bash - Les arguments (paramètres)
Il est possible de fournir à un script, sur la ligne de commandes, les arguments nécessaires à son exécution. Ces arguments sont appelés "paramètres".
Il en existe deux catégories : les paramètres positionnels et les paramètres spéciaux.
Note : Le shell Bourne est limité aux paramètres de 0 à 9.
Il suffit alors d'invoquer le script en lui passant un certain nombre de paramètres :
Si certains paramètres contiennent des caractères spéciaux ou des espaces, il
faut alors les "quoter" :
Ces paramètres sont les suivants :
Une simple commande tel que :
Cette fonctionnalité peut s'avérer utile dans le traitement de fichiers ligne
par ligne afin d'isoler chaque mot (champ), et d'en formater la sortie.
On peut indiquer en argument (
Il en existe deux catégories : les paramètres positionnels et les paramètres spéciaux.

Notre vidéo
Chargement de votre vidéo
"FAQ : Bash - Les paramètres"
Paramètres positionnels
Ce sont tous simplement les arguments passés en "paramètres" sur la ligne de commandes, à l'invocation d'un script. Ils sont alors affectés aux variables réservées 1,2,3,...9,10,11,... et peuvent être appelés à l'aide des expressions$1,
$2...
${10},
${11}...
Note : Le shell Bourne est limité aux paramètres de 0 à 9.
Exemple 1
Voici un petit script qui se contente d'afficher certains des arguments passés en paramètres en fonction de leur position.#!/bin/bash # affiche_param.sh echo "Le 1er paramètre est : $1" echo "Le 3ème paramètre est : $3" echo "Le 10ème paramètre est : ${10}" echo "Le 15ème paramètre est : ${15}"
Il suffit alors d'invoquer le script en lui passant un certain nombre de paramètres :
./affiche_param.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17ou encore :
Le 1er paramètre est : 1
Le 3ème paramètre est : 3
Le 10ème paramètre est : 10
Le 15ème paramètre est : 15
./affiche_param.sh un 2 trois 4 5 6 7 8 9 dix 11 12 13 14 quinze 16 17
Le 1er paramètre est : un
Le 3ème paramètre est : trois
Le 10ème paramètre est : dix
Le 15ème paramètre est : quinze
Si certains paramètres contiennent des caractères spéciaux ou des espaces, il
faut alors les "quoter" :
./affiche_param.sh un 2 "le 3ème" 4 5 6 7 8 9 dix 11 12 13 14 "le 15ème" 16 17
Le 1er paramètre est : un
Le 3ème paramètre est : le 3ème
Le 10ème paramètre est : dix
Le 15ème paramètre est : le 15ème
Les paramètres spéciaux
Ce sont en fait là aussi des variables réservées qui permettent pour certaines d'effectuer des traitements sur les paramètres eux-même.Ces paramètres sont les suivants :
$0Contient le nom du script tel qu'il a été invoqué
$*L'ensembles des paramètres sous la forme d'un seul argument
$@L'ensemble des arguments, un argument par paramètre
$#Le nombre de paramètres passés au script
$?Le code retour de la dernière commande
$$Le PID su shell qui exécute le script
$!Le PID du dernier processus lancé en arrière-plan
Exemple 2
Voici un autre petit script mettant en oeuvre l'ensemble des paramètres spéciaux vus ci-dessus.#!/bin/bash # affiche_param_2.sh # Affichage du nom su script echo "Le nom de mon script est : $0" # Affichage du nombre de paramètres echo "Vous avez passé $# paramètres" # Liste des paramètres (un seul argument) for param in "$*" do echo "Voici la liste des paramètres (un seul argument) : $param" done # Liste des paramètres (un paramètre par argument) echo "Voici la liste des paramètres (un paramètre par argument) :" for param in "$@" do echo -e " Paramètre : $param" done # Affichage du processus echo "Le PID du shell qui exécute le script est : $$" # Exécution d'une commande qui s'exécute en arrière-plan sleep 100 & # Affichage du processus lancé en arrière-plan echo "Le PID de la dernière commande exécutée en arrière-plan est : $!" # Affichage du code retour de la dernière commande "echo" echo "Le code retour de la commande précédente est : $?" # Génération d'une erreur echo "Génération d'une erreur..." # Affichage de la mauvaise commande echo "ls /etc/password 2>/dev/null" ls /etc/password 2>/dev/null # Affichage du code retour de la dernière commande echo "Le code retour de la commande précédente est : $?" exitCe qui donne avec l'invocation suivante :
./affiche_param_2.sh 1 2 3 quatre 5 six
Le nom de mon script est : ./affiche_param_2.sh
Vous avez passé 6 paramètres
Voici la liste des paramètres (un seul argument) : 1 2 3 quatre 5 six
Voici la liste des paramètres (un paramètre par argument) :
Paramètre : 1
Paramètre : 2
Paramètre : 3
Paramètre : quatre
Paramètre : 5
Paramètre : six
Le PID du shell qui exécute le script est : 6165
Le PID de la dernière commande exécutée en arrière-plan est : 6166
Le code retour de la commande précédente est : 0
Génération d'une erreur...
ls /etc/password 2>/dev/null
Le code retour de la commande précédente est : 1
Initialiser des paramètres
- La commande "set" -
Il est possible d'affecter directement des paramètres au shell grâce à la commandeset
Une simple commande tel que :
set param1 param2 param3initialisera automatiquement les paramètres positionnels
$1,
$2,
$3avec les valeurs
param1,
param2,
param3, effaçant de ce fait les anciennes valeurs si toutefois elles existaient. Les paramètres spéciaux
$#,
$*et
$@sont automatiquement mis à jours en conséquence.
Exemples
$ set param1 param2 param3
$ echo "Nombre de paramètres : $#"
Nombre de paramètres : 3
$ echo "Le second paramètre est : $2"
Le second paramètre est : param2
$ echo "Les paramètres sont : $@"
Les paramètres sont : param1 param2 param3
$ set pêche pomme
$ echo "Nombre de paramètres : $#"
Nombre de paramètres : 2
$ echo "Les paramètres sont : $@"
Les paramètres sont : pêche pomme
Cette fonctionnalité peut s'avérer utile dans le traitement de fichiers ligne
par ligne afin d'isoler chaque mot (champ), et d'en formater la sortie.
$ IFS=":"; set $(grep $USER /etc/passwd)
$ echo -e "Login : $1 Nom : $5 ID : $3 Group : $4 Shell : $7"
Login : jp
Nom : Jean-Philippe
ID : 500
Group : 500
Shell : /bin/bash
- La commande "shift" -
La commande interneshiftpermet quant à elle de décaler les paramètres. La valeur du 1er paramètre (
$1) est remplacée par la valeur du 2nd paramètre (
$2), celle du 2nd paramètre (
$2) par celle du 3ème paramètre (
$3), etc...
On peut indiquer en argument (
shift [n]) le nombre de pas (position) dont il faut décaler les paramètres.
Exemple 3
Voilà une mise en oeuvre de l'emploi de la commande interne "shift".#!/bin/bash # decale_param.sh echo echo "Nombre de paramètres : $#" echo "Le 1er paramètre est : $1" echo "Le 3ème paramètre est : $3" echo "Le 6ème paramètre est : $6" echo "Le 10ème paramètre est : ${10}" echo "=============================================" echo "Décalage d'un pas avec la commande "shift"" shift echo "Nombre de paramètres : $#" echo "Le 1er paramètre est : $1" echo "Le 3ème paramètre est : $3" echo "Le 6ème paramètre est : $6" echo "Le 10ème paramètre est : ${10}" echo "=============================================" echo "Décalage de quatre pas avec la commande "shift 4"" shift 4 echo "Nombre de paramètres : $#" echo "Le 1er paramètre est : $1" echo "Le 3ème paramètre est : $3" echo "Le 6ème paramètre est : $6" echo "Le 10ème paramètre est : ${10}" echoEt son résultat :
./decale_param.sh 1 2 3 4 5 6 7 8 9 10
Nombre de paramètres : 10
Le 1er paramètre est : 1
Le 3ème paramètre est : 3
Le 6ème paramètre est : 6
Le 10ème paramètre est : 10
=============================================
Décalage d'un pas avec la commande "shift"
Nombre de paramètres : 9
Le 1er paramètre est : 2
Le 3ème paramètre est : 4
Le 6ème paramètre est : 7
Le 10ème paramètre est :
=============================================
Décalage de quatre pas avec la commande "shift 4"
Nombre de paramètres : 5
Le 1er paramètre est : 6
Le 3ème paramètre est : 8
Le 6ème paramètre est :
Le 10ème paramètre est :
Ce document intitulé « Bash - Les arguments (paramètres) » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.