# BASH rendre facultatif l'argument d'une option?

**URL:** <https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422>\
**Category:** Programmation\
**Tags:** bash\
**Created:** [Août 29, 2018, 6:43 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422 "2018-08-29T18:43:01Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 29, 2018, 6:43 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422/1 "2018-08-29T18:43:01Z")

</div>

Bonjour,

dans un script bash, la fonction _getopts_ permet d’indiquer un argument à une option indiqué par le signe «:», ainsi

`while getopts ab: option`

l’option _a_ n’a pas d’argument  
l’option _b_ exige un argument

mais il n’y a pas à ma connaissance d’option qui accepte à la fois un argument et aucun argument, ou un argument par défaut.

Existe-t-il une solution à ce problème?

---

<div class="post-metadata">

**Author:** ![Clochette](https://www.debian-fr.org/user_avatar/www.debian-fr.org/clochette/32/8757_2.png) [@Clochette](https://www.debian-fr.org/u/Clochette)\
**Post date:** [Août 29, 2018, 8:13 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422/2 "2018-08-29T20:13:04Z")

</div>

Avec un _case_ non ?

Genre trouvé vite fait (il y a sans doute plus pertinent)

[http://www.linux-france.org/article/memo/node88.html](http://www.linux-france.org/article/memo/node88.html)

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 29, 2018, 9:06 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422/3 "2018-08-29T21:06:48Z")

</div>

Une idée intéressante en effet (`# case sur le nombre d'arguments fournis par l'utilisateur`), à creuser  
Merci

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Août 31, 2018, 1:07 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422/4 "2018-08-31T13:07:02Z")

</div>

Je pense qu’il faudrait plutôt que dans le case associé à getopts, si l’option est celle qui attend ou non un paramètre, et si l’argument derrière n’est pas une des options associées au getopts (bloc case imbriqué dans le 1er bloc case), alors tu retires l’argument de la liste des arguments que getopts doit parser. De toute façon tu es obligé de déclarer ton option comme n’attendant pas de paramètre.  
Mais je ne sais pas vraiment comment faire avec getopts, j’utilise plus souvent getopt (sans le s), qui n’est pas natif du shell, mais que je trouve un peu plus flexible justement (sans parler du fait que ça me fait à chaque fois penser à Bob Marley _“getopt, standopt…”_)  
[https://mariusvw.com/2013/02/24/bash-getopt-versus-getopts/](https://mariusvw.com/2013/02/24/bash-getopt-versus-getopts/)

---

<div class="post-metadata">

**Author:** ![josephtux](https://www.debian-fr.org/user_avatar/www.debian-fr.org/josephtux/32/3985_2.png) [@josephtux](https://www.debian-fr.org/u/josephtux)\
**Post date:** [Août 31, 2018, 5:02 UTC](https://www.debian-fr.org/t/bash-rendre-facultatif-largument-dune-option/77422/6 "2018-08-31T17:02:02Z")

</div>

Je ne connaissais pas _getopt_, son offre d’argument optionnel ( :: avec _case_ imbriqué, si j’ai bien compris) et aussi son offre d’options longues.  
À découvrir.  
Je m’y mets tout de suite, merci Sputnik. (merci aussi Clochette)
