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.