BASH rendre facultatif l'argument d'une option?

bash
Tags: #<Tag:0x00007f092b91e5c0>

#1

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?


#2

Avec un case non ?

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

http://www.linux-france.org/article/memo/node88.html


#3

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


#4

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/


#6

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)