[csh] Options

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

6 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ;-(
    0
  2. LCoileux
     
    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.
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ;-))
    0
  4. LCoileux
     
    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 !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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 ?
    0
  7. LCoileux
     
    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.
    0