Les arguments transmis au script bash courant sont accessibles via les variables $1 à $n. La variable $@ désigne l'ensemble des arguments.
getopts et getopt sont deux moyens similaires mais non identiques pour gérer de façon avancée les options et les arguments passés aux scripts.
La gestion des options n'est pas triviale si l'on souhaite un usage souple et conforme aux standards. C'est la raison d'être des outils getopts et getopt. Par exemple les différents appels du script ci-dessous devraient produire le même comportement:
$ ./mon_script -a -b -c $ ./mon_script -abc $ ./mon_script -b -a -c $ ./mon_script -ba -c $ ./mon_script -ba -c $ ./mon_script --long-a --long-c --long-b
Les difficultés que pointe cet exemple:
getopts est une primitive de Bash:
type getopts getopts est une primitive du shell
Utilisée avec les commandes while et case, elle va permettre la gestion des options et de leur argument saisis sur la ligne de commande du script.
Le détail du fonctionnement de getopts est disponible dans l'aide via help getopts
. A chaque appel, getopts copie une option et son argument de la ligne de commande et les place dans des variables de travail. La boucle while permet d'appeler autant de fois que nécessaire la commande getopts afin de parcourir l'ensemble des arguments de la ligne de commande.
La commande case permet d'associer le comportement souhaité à l'option courante reconnue sur la ligne de commande.
La structure générale est donc la suivante:
# Mon script # Si elle est trouvée sur la ligne de commande, # l'option 'h' est copiée dans la variable de travail opt_name while getopts ":h" opt_name; do case $opt_name in h) # affiche l'aide et quitte echo "Ceci est mon message d'aide" exit 0;; esac done echo "Exécution du comportement par défaut..." exit 0
Un script d'exemple est disponible au noeud /usr/share/doc/util-linux/examples/getopt-parse.bash.