[csh] Options
LCoileux
-
LCoileux -
LCoileux -
Bonjour,
je travaille actuellement sur un script prenant en paramètre des options, et j'ai des problemes pour verifier ces options. J'ai utilisé getopt, et au niveau de l'execution cela fonctionne bien. Cependant, si je veux voir si l'option est valide ou pas, mon code est:
if (($#argv == 3)&&(("-m" != $1)||("-l" != $1))) then
echo "ERREUR: l'option passée n'est pas valide"
exit(3)
endif
et lorsque j'essaie avec aussi bien n'importe quelle option que l'option -m, ce la me renvoie que l'option n'est pas valide. De plus, lorsque j'essaie avec -l, cela me renvoie "if: missing file name".
Comment faire ?
je travaille actuellement sur un script prenant en paramètre des options, et j'ai des problemes pour verifier ces options. J'ai utilisé getopt, et au niveau de l'execution cela fonctionne bien. Cependant, si je veux voir si l'option est valide ou pas, mon code est:
if (($#argv == 3)&&(("-m" != $1)||("-l" != $1))) then
echo "ERREUR: l'option passée n'est pas valide"
exit(3)
endif
et lorsque j'essaie avec aussi bien n'importe quelle option que l'option -m, ce la me renvoie que l'option n'est pas valide. De plus, lorsque j'essaie avec -l, cela me renvoie "if: missing file name".
Comment faire ?
Configuration: Linux Firefox 2.0.0.6
6 réponses
-
Salut,
J'ai utilisé getopt, et au niveau de l'execution cela fonctionne bien.
On peut voir le code s'il te plaît ?
Et le script dans sa totalité tant qu'a y être...
Au fait, le csh c'est obligé ? C'est pas le plus simple ni ce qui se fait de mieux ;-(
-
Bonjour
voici le script en entier:
#! /bin/csh unalias * # Test des arguments #Pas assez ou trop d'arguments if (($#argv < 2 )||($#argv > 3)) then echo "ERREUR: Il faut passer deux arguments en paramètre" exit(1) endif #L'option passée en paramètre n'est pas valide if (($#argv == 3)&&(("-m" != $1)||("-l" != $1))) then echo "ERREUR: l'option passée n'est pas valide" exit(3) endif #Le repertoire source n'existe pas ou n'est pas accessible set opt = `getopt lm $argv` set l = 0 set m = 0 switch ($opt[1]) case "-l": if ((!(-d $2)) || (!(-r $2)) || (!(-w $2))) then echo "ERREUR: le repertoire $2 n'existe pas ou n'est pas accessible" exit(2) endif breaksw case "-m": if ((!(-d $2)) || (!(-r $2)) || (!(-w $2))) then echo "ERREUR: le repertoire $2 n'existe pas ou n'est pas accessible" exit(2) endif breaksw default: if ((!(-d $1)) || (!(-r $1)) || (!(-w $1))) then echo "ERREUR: le repertoire $1 n'existe pas ou n'est pas accessible" exit(2) endif breaksw endsw # Changement du nom du repertoire switch ($opt[1]) #Cas où l'on fait appel à l'option -l case "-l" : if ($2:t == " ") then set rep = $2:h:t else set rep = $2:t endif if ($2 != $3) then mv $rep $3 endif breaksw #Cas où l'on fait appel à l'option -m case "-m": if ($2:t == " ") then set rep = $2:h:t else set rep = $2:t endif if ($2 != $3) then mv $rep $3 endif breaksw #Cas sans options default : if ($1:t == " ") then set rep = $1:h:t else set rep = $1:t endif if ($1 != $2) then mv $rep $2 endif breaksw endsw # Mise à jour des fichiers java switch ($opt[1]) #Cas où l'on fait appel à l'option -l case "-l": cd $3 set liste = (`ls`) foreach i ($liste) if ($i:e == "java") then if ("`head -1 $i`" == "`grep package $i`") then sed -i '1d' $i; sed -i '1i\package '$3';' $i else sed -i '1i\package '$3';' $i endif endif end breaksw #Cas où l'on fait appel à l'option -m case "-m": cd $3 set liste = (`ls`) foreach i ($liste) if ($i:e == "java") then if ("`head -1 $i`" == "`grep package $i`") then sed -i '1d' $i; sed -i '1i\package '$3';' $i else sed -i '1i\package '$3';' $i endif endif if ($i:e == "class") then rm $i endif end breaksw #Cas sans option default: cd $2 set liste = (`ls`) foreach i ($liste) if ($i:e == "java") then if ("`head -1 $i`" == "`grep package $i`") then sed -i '1d' $i; sed -i '1i\package '$2';' $i else sed -i '1i\package '$2';' $i endif endif end endsw exit(0)
Et oui, malheureusement le csh est obligatoire....
Au niveau du script, je n'ai pas encore traiter l'option -l, vu que je bloque sur la validité de celles-ci. -
Re-
Essaye comme ça pour ton test de validité des paramètres (-l et -m), si c'est bon à la place du "OK" tu pourrais y incorporer la suite de ton script...#L'option passée en paramètre n'est pas valide if (("$1" == "-m") || ("$1" == "-l")) then echo "OK" else echo "ERREUR: l'option passée n'est pas valide" exit(3) endifOn se fiche du nombre de paramètres vu que tu l'as testé auparavant ;-))
-
Alors, cette modification ne marche que partiellement. En effet, lorsque je rentre comme option -l, il m'affiche toujours "if: missing file name".
De plus, je ne peux ignorer le nombre de parametres, car il peut y en avoir 2 ou 3, et c'est seulement dans le cas ou il y en a 3 qu'il faut tester l'option.
Merci quand meme ! -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ben chez moi que ce soit le "-l" ou le "-m" ça passe nickel ;-))
T'as bien mis "("$1" == "-l")" le paramètres en 1er dans le test ?
Sinon pour ton test des 3 paramètres, fais une condition "if" imbriquée :if ($#argv == 3) then if (("$1" == "-m") || ("$1" == "-l")) then echo "OK" else ... endif else echo "ERREUR: l'option passée n'est pas valide" exit(3) endifou un truc du genre, non ?
-
Merci, ca marche, j'avais juste oublié les guillemets.
Autre chose, est-ce juste si, pour verifier que l'argument passé en paramètre est une option, je fait
"$1" == "-*"
car apparemment, il me cherche la chaine de caractère "-*" et non le symbole "-" suivi de n'importe quel caractère.