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 :

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
...

suivant …