Outils pour utilisateurs

Outils du site


dev:bash:arguments_et_options_de_script

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:bash:arguments_et_options_de_script [2023/02/10 09:46] – supprimée - modification externe (Unknown date) 127.0.0.1dev:bash:arguments_et_options_de_script [2023/02/10 17:23] (Version actuelle) – Complétion section getopts yoann
Ligne 1: Ligne 1:
 +{{tag>dev bash script option argument}}
  
 +====== Gestion des options et arguments dans les scripts Bash ======
 +
 +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.
 +
 +  * **getopts** est intégré a l’interpréteur **bash** (primitve).
 +  * **getopt** est un binaire.
 +
 +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:
 +
 +<code bash>
 +$ ./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
 +</code>
 +
 +Les difficultés que pointe cet exemple:
 +  * Ordre des options/paramètres
 +  * La concaténation des options courtes
 +  * La gestions des options courtes ou longues
 +
 +===== Utilisation de getopts =====
 +
 +**getopts** est une primitive de Bash:
 +<code>
 +type getopts
 +getopts est une primitive du shell
 +</code>
 +
 +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:
 +<code bash>
 +# 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
 +</code>
 +
 +===== Utilisation de getopt =====
 +
 +Un script d'exemple est disponible au noeud **/usr/share/doc/util-linux/examples/getopt-parse.bash**.
 +
 +
 +
 +
 +===== Références =====
 +
 +  * http://aplawrence.com/Unix/getopts.html
 +  * https://www.redhat.com/sysadmin/arguments-options-bash-scripts