|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
Salut à tous,
je souhaite utiliser la fonction getopts pour parser les options. J'ai dans mon script, une fonction et un programme principal, le programme principal utilise getopts pour effectuer le bon appel fonction (je suis dans un cas ou une option est utilisée à la fois). Le problème semble se situer au niveau de la fonction avec getopts puisque aucune des options que j passe ne rentre dans le case et la commande que je construis est vide ... le code : Code :
Code :
ben
__________________
Meet the free software gang |
||||
|
|
00
|
|
|
#2 | ||
|
Nouveau Membre du Club
![]() Inscription : avril 2010 Messages : 49 ![]() |
Salut essayes :
Code :
|
||
|
|
01
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Il ne faut pas appeler ta variable "optstring", c'est un mot réservé à getopts.
Et il te manque un : sous le case.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
|
|
10
|
|
|
#4 | ||||
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
salut FRUiT,
toujours le même problème : Code :
Code :
ben
__________________
Meet the free software gang |
||||
|
|
00
|
|
|
#5 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
Avec case "$opt" ça fonctionnera peut-être mieux ?
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
10
|
|
|
#6 | ||
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
bien vu
c'est toujours pas ça : cmd vide : Code :
Peut on utiliser gettopts dans une fonction (je ne vois pas pourquoi on ne pourrait pas...) ?
__________________
Meet the free software gang |
||
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
selon help getopts :
OPTIND est initialisé à 1 à chaque fois que le shell ou qu'un script shell est appelé or, une fonction n'est ni l'un ni l'autre, il faut donc que OPTIND soit local dans la fonction. |
|
|
10
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : janvier 2011 Messages : 970 ![]() |
Salut,
Et il me semble que doit être ne dehors du "done", non ?
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
10
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
exact.
|
|
|
10
|
|
|
#10 |
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
super réponse (comme d'hab
),ça va mieux avec dans ma fonction. Peux tu me préciser le rôle exact de l'instruction shift $(($OPTIND-1)) ? merci à vous 2 ![]() ben
__________________
Meet the free software gang |
|
|
00
|
|
|
#11 |
![]() ![]() Alain Ingénieur d'études décisionnel Inscription : mai 2002 Messages : 4 445 ![]() |
Il fallait préciser que tu travailles avec bash !
Avec ksh, il n'est pas nécessaire de réinitialiser OPTIND dans les fonctions. OPTIND est une variable mise à jour par getopts qui donne la position de l'élément suivant dans la liste des paramètres. Elle est donc incrémentée à chaque passage dans la boucle while getopts. Si une option comporte un argument, elle est incrémentée de 2 ! En exécutant shift $(( $OPTIND-1 )), on décale le pointeur de paramètre pour que $1 représente le premier paramètre qui suit la dernière option.
__________________
Modérateur Langage SQL N'oubliez pas le bouton et pensez aux balises [code]Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur ![]() |
|
|
20
|
|
|
#12 | |
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
merci pour ta réponse,
une question : pourquoi cette instruction n'est pas dans le while, afin de décaler les paramètres à chaque tour de boucle ? http://www.linux.com/archive/feed/118031 Citation:
__________________
Meet the free software gang |
|
|
|
00
|
|
|
#13 | ||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Parce que OPTIND représente le nombre total des options et leurs paramètres. C'est écrit dans ta citation.
Code :
Après analyse des options la ligne de commande devient : Donc $1 devient plow, $2 harvest, etc... Comme c'est un shift de 3 positions à la fois (et non une) il ne faut pas l'inclure dans le while, my bad. [EDIT] Petite précision, dans l'exemple donné, alt est supposé être le OPTARG de l'option b, ce qui n'est précisé nulle part (du moins dans la partie que tu cites), donc les arguments "supplémentaires" commencent après.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
||
|
|
10
|
|
|
#14 | ||||
|
Membre éprouvé
![]() Benoît Inscription : janvier 2009 Messages : 392 ![]() |
ok ça roule pour moi : merci pour vos supers réponses.
Je mets un petit bout de code à moi qui m'a permis de bien fixer les choses : Code :
Code :
puis +2 avec : -a lolo puis +2 avec : -b momo puis +2 avec : -c roro puis +1 avec : -d Le shift permet de recaler les options pour traiter l'argument lolo. merci à tous, à bientôt, ben
__________________
Meet the free software gang |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com