Bash - Les arguments (paramètres)
baissaoui
Messages postés
590
Statut
Webmaster
-
21 juin 2022 à 12:36
Document initial créé par Jipicy
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 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.
Notre 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 :