{RESOLU}getopts et paramètre - Shell/Batch - Programmation
Marsh Posté le 31-07-2007 à 15:25:14
ptitcon a écrit : J'ai un petit soucis avec getopts, je l'utilise avec une seule option pour créer un mode debug dans un script. Le problème est que ce script reçoit déjà un argument,donc j'aimerai utilisé l'option pour getopt après le premier argument comme ceci : |
C'est tout à fait normal. Sur Unix/Linux, le fonctionnement des options est "normalisé" et doivent impérativement être placées avant les arguments de travail du programme (du script). Donc dès que getopts trouve un argument qui ne commence pas par "-", il considère qu'il a fini de bosser.
Pour résoudre ton problème, il faut que, une fois que getopts a fini de bosser, tu indiques à ton script de sauter les options traitées pour pas qu'elles soient à nouveau traitées comme argument. C'est faisable car getopts stocke le nombre de passes qu'il a exécutées dans la variable OPTIND (y compris la passe où il s'est apreçu qu'il avait fini). Donc "$OPTIND - 1" contient le nb d'options. Il te suffit donc de faire un shift de cette valeur
while getopts d opt |
ptitcon a écrit :
|
Non
Tu lanceras ton script comme ceci
Code :
|
ou bien
Code :
|
Et si jamais tu voulais passer à ton script la valeur "-d" comme argument et non comme option, il te faudrait envoyer à getopts un indicateur spécifique indiquant "à partir de maintenant, il n'y a plus d'option et les valeurs même avec un tiret seront des arguments". Cet indicateur est le double tiret "--"
Code :
|
ou bien
Code :
|
Marsh Posté le 31-07-2007 à 15:36:54
Merci beaucoup..
Parce qu'en fait j'avais arrangé la chose avec mon argument.. Mais c'était pas propre du tout.
Du style
if [ "$1" = "-d" ]; then
arg=$2
else
arg=$1
fi
pas beau du tout
Marsh Posté le 31-07-2007 à 23:15:21
ptitcon a écrit : Parce qu'en fait j'avais arrangé la chose avec mon argument.. Mais c'était pas propre du tout. |
Ceci sera un poil plus beau: test "$1" = "-d" && arg=$2 || arg=$1
Sinon t'as un cours où tout ça est très bien expliqué ici http://fr.lang.free.fr/cours/Shell_v2.0.pdf
getopts p.53 et getopt p.62
Marsh Posté le 01-08-2007 à 09:50:37
Merci sve@r, pas bête comme idée mais ça reste pas très beau, ta première solution reste de loin la plus correcte. Ça tourne rond.
Merci pour le lien.
Marsh Posté le 31-07-2007 à 11:41:03
J'ai un petit soucis avec getopts, je l'utilise avec une seule option pour créer un mode debug dans un script. Le problème est que ce script reçoit déjà un argument,donc j'aimerai utilisé l'option pour getopt après le premier argument comme ceci :
Seulement, quand j'exécute mon script soit l'option est placée en premier et est traitée comme argument du script en plus d'être traité par getopts, soit elle est placée après et getopts ne la voit pas...
mon getopts :
Peut-être faut-il mofifier $variable pour qu'il prenne le deuxième paramètre? (ça a pas eu l'air de marcher)
Message édité par ptitcon le 01-08-2007 à 09:48:36