le scrip shell : paramètres
Dans nombre de cas, il peut s’avérer nécessaire de transmettre à un script un certain nombre d’arguments nécessaires à son fonctionnement (nom de fichier à traiter, répertoire de à sauvegarder, etc …) et, comme de bien entendu, le shell sait parfaitement gérer les éventuels arguments qui lui seront fournis…
L’accès aux arguments se fait via un certain nombre de variables spéciales automatiquement renseignées :
- $# : représente le nombre d’arguments fournis au script
- $0 : variable contenant le nom du script (en lecture-seule)
- $1 .. $9 : les 9 premiers arguments fournis
- ${10} et suivants : les arguments suivants (bash et ksh)
- $* : la liste des arguments présentée sous forme d’une seule chaine de caractères
- $@ : le tableau des arguments (autant de chaines de caractères que d’arguments fournis)
Exemple d’accès aux variables positionnées :
#!/bin/bash echo -n '$#=' ; echo $# echo -n '$0=' ; echo $0 echo -n '$1=' ; echo $1 echo -n '$2=' ; echo $2 echo -n '$*=' ; echo $* echo -n '$@=' ; echo $@ echo 'Utilisation de $*' NB=1 for arg in "$*" ; do echo "argument $NB : $arg" ; NB=$(expr $NB + 1) ; done NB=1 echo 'Utilisation de $@' for arg in "$@" ; do echo "argument $NB : $arg" ; NB=$(expr $NB + 1) ; done;
L’appel de cet exemple par ./script.sh A B C « DEF » G fournit le résultat suivant :
$#=5 $0=./script.sh $1=A $2=B $*=A B C D E F G $@=A B C D E F G Utilisation de $* argument 1 : A B C D E F G Utilisation de $@ argument 1 : A argument 2 : B argument 3 : C argument 4 : D E F argument 5 : G
Dans les bonnes pratiques, il est de la responsabilité du script de vérifier les arguments fournis avant de les utiliser … Ainsi, si le script nécessite 2 arguments, il faudra vérifier qu’il est bien invoqué avec 2 arguments, et à défaut, il affichera un message d’erreur et se terminera, par exemple :
... if [ $# -ne 2 ] ; then echo "Arguments A et B absents." echo "utilisation :" echo "$0 A B" exit 2 fi ...