[csh] Options

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 ?
Configuration: Linux
Firefox 2.0.0.6

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. Modérateur
      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)
      endif
      
      ou un truc du genre, non ?
      1. 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 !
        1. Modérateur
          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)
          endif
          On se fiche du nombre de paramètres vu que tu l'as testé auparavant ;-))
          1. 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.
            1. Modérateur
              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 ;-(