Analyser les options d’un script avec « getopts »
La commande interne getopts permet à un script d’analyser les options passées en argument.Pour vérifier la validité de chacune des options, il faut appeler getopts à partir d’une boucle.
Le script suivant est un exemple d’utilisation de getopts :
1 #!/bin/bash
2 function help
3 {
4 echo -e "\nUsage : toto.sh -n name -a age [-h help]\n"
5 exit 1
6 }
7 testNAME=0
8 testAGE=0
9 [ "`echo $*`" = "" ] && help && exit 1
10 while getopts hn:a: option
11 do
12 echo "getopts a trouvé l'option $option"
13 case $option in
14 h)
15 echo "Exécution des commandes de l'option h"
16 echo "Liste des arguments à traiter : $OPTARG"
17 help
18 ;;
19
20 n)
21 NAME=$OPTARG
22 testNAME=1
23 echo "Exécution des commandes de l'option n"
24 echo "Liste des arguments à traiter : $OPTARG"
25 ;;
26 a)
27 AGE=$OPTARG
28 testAGE=1
29 echo "Exécution des commandes de l'option a"
30 echo "Liste des arguments à traiter : $OPTARG"
31 ;;
32
33 *)
34 echo "Exécution des commandes de l'option h"
35 echo "Liste des arguments à traiter : $OPTARG"
36 help
37 ;;
38 esac
39 done
40 if [ $testNAME = 1 ] && [ $testAGE = 1 ]
41 then
42 echo "Ton nom est $NAME et tu as $AGE ans."
43 fi
La liste des options utilisables avec ce script sont définies à la ligne 10 (getopts « hn:a: » option). Il s’agit des options -h, -n et -a.
Le caractère « : » inscrit après les options « n » et « a » indique que ces options doivent être suivies obligatoirement d’un argument.
La variable « option » permet de récupérer la valeur de l’option en cours de traitement par la boucle while.
L’option initialisé avec le caractère « * » permet de rentrer dans ce cas lorsqu’il y a une erreur au niveau de l’option donnée au script (option inexistante ou argument non renseigné), dans cette exemple on utilise la fonction « help ».
La variable réservée « $OPTARG » contient l’argument associé à l’option.
Remarque : Il y a aussi la variable réservée « $OPTIND » qui contient l’indice de la prochaine option à traiter, hn:a: => h indice 1, n=2, :=3, a=4 et :=5.
Exécution du script avec des options valides :
[root@test sch]# ./toto.sh -a 24 -n Sam getopts a trouvé l'option a Exécution des commandes de l'option a Liste des arguments à traiter : 24 getopts a trouvé l'option n Exécution des commandes de l'option n Liste des arguments à traiter : Sam Ton nom est Sam et tu as 24 ans.
Exécution du script avec des options invalides :
[root@test sch]# ./toto.sh -a 24 -n getopts a trouvé l'option a Exécution des commandes de l'option a Liste des arguments à traiter : 24 ./toto.sh: option requires an argument -- n getopts a trouvé l'option ? Exécution des commandes de l'option h Liste des arguments à traiter : Usage : toto.sh -n name -a age [-h help] [root@test sch]# ./toto.sh -a 24 -n Sam -t getopts a trouvé l'option a Exécution des commandes de l'option a Liste des arguments à traiter : 24 getopts a trouvé l'option n Exécution des commandes de l'option n Liste des arguments à traiter : Sam ./toto.sh: illegal option -- t getopts a trouvé l'option ? Exécution des commandes de l'option h Liste des arguments à traiter : Usage : toto.sh -n name -a age [-h help]
Lorsque la commande getopts détecte une option invalide, la variable option est initialisée avec la caractère « ? » et un message d’erreur est affiché à l’écran.