IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Gerer les options d'un script


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut Gerer les options d'un script
    Bonjour,

    Dans mon script "test.sh" je souhaiterais verifier les options et leurs valeures associés avec la function getopts. Voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    if [ $# -eq 1 -a "$1" = -h ]; then
            usage
          fi
     
    while getopts ":c:n:" option
    do
    case $option in
     c)
       if [ -n $OPTARG ]; then
         print "ERROR: You must provide a TRUE or FALSE to indicate your need: "
         usage
           else
        identifyClearedTraps "$OPTARG"
       fi
       ;;
     n)
       NB_TRAPS="$OPTARG"
       ;;
     \?) echo " option $OPTARG  INVALIDE" >&2
         E_OPTION=3
    esac
    done
    shift $(($OPTIND - 1))
     
    cmd1
    cmd2
    cmd3
    .....
    Et voila mes questions:
    Question 1:
    Si j'appele mon script de la facon suivante: le script est appelé sans erreur et tous mes commandes sont executés malgré que l'option n'est pas valide. Par contre, si je l'appele comme suit : là j'ai un message d'erreur m'indiquant que l'option n'est pas valide.

    Comment je dois faire pour que dans les deux cas j'aurrai le message d'erreur ?

    Question 2:
    dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while getopts ":c:n:" option
    le : apres "c" et "n" signifie que ces deux options ont des valeures associés. Si j'appele mon scritp avec l'option mais sans specifié une valeur associée, j'ai l'impression que le script n'execute pas les commandes specifiés dans . Pourquoi ?


    Merci en avance

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     \?) echo " option $OPTARG  INVALIDE" >&2
    il me semble que ce devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     *) echo " option $OPTARG  INVALIDE" >&2
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Par défaut
    Avec getopts, le \? serait même à remplacer par [?]

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Par défaut
    pour la réponse à ta question 2, essaye en remplacant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while getopts ":c:n:" option

    par


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while getopts c:n: option

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2009
    Messages : 26
    Par défaut
    Salut,

    Réponse à la question 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si j'appele mon script de la facon suivante:
    Code :
     
    ./test.sh t
     
    Dans ce cas là, le script est appelé sans erreur et tous mes commandes sont executés malgré que l'option n'est pas valide.
    le "t" est considéré comme paramètre et non comme option, ton script test.sh est donc lancé sans option. Une option doit toujours être précédé d'une tiret "-".

    Ci-dessous, affichage des erreurs :
    - lors de l'oubli d'option,
    - Si le premier paramètre n'est pas une option.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if [ "$(echo $* | grep \- | wc -l)" = 0 ]
    then
      echo "le script $(basename $0) a besoin d option, pour de plus amples informations, utilisez :"
      echo "$(basename $0) -h  ou  $(basename $0) --help"
      exit
    elif [ "$(echo $1 | grep \- | wc -l)" = 0 ]
    then
      echo "L'option doit preceder les parametres, pour de plus amples informations, utilisez :"
      echo "$(basename $0) -h  ou  $(basename $0) --help"
      exit
    fi

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 90
    Par défaut
    et quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       while getopts t:a: option
       do
          case $option in
             t) option "-t" ;;
             a) option "-a" ;;
             *) mauvaise option;;
          esac
       done

  7. #7
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Attention le ":" après une lettre signifie que l'option associé reçoit u argument


    petit exemple venant de
    http://docs.sun.com/app/docs/doc/816...6nb7mam?a=view
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    set -- `getopt abo: $*`
    if [ $? != 0 ]
    then
               echo $USAGE
               exit 2
    fi
    for i in $*
    do
               case $i in
               -a | -b)     FLAG=$i; shift;;
               -o)           OARG=$2; shift 2;;
               --)           shift; break;;
               esac
    done
    ainsi que les utilisation possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cmd -aoarg filename1 filename2
    cmd -a -o arg filename1 filename2
    cmd -oarg -a filename1 filename2
    cmd -a -oarg -- filename1 filename2

Discussions similaires

  1. Getopts gerer les options @
    Par David55 dans le forum Langage
    Réponses: 16
    Dernier message: 15/11/2010, 17h20
  2. Script VBS pour modifier les options Internet
    Par rjl dans le forum Windows XP
    Réponses: 9
    Dernier message: 26/11/2009, 18h50
  3. Réponses: 1
    Dernier message: 26/05/2008, 11h18
  4. Gerer par code les Options d'un DBGrid
    Par franck SEFIC dans le forum Delphi
    Réponses: 11
    Dernier message: 04/05/2007, 18h38
  5. Comment gérer les objects déclarer en HTML dans un script JAVASCRIPT?
    Par Thauglor dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2006, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo