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

Applications et environnements graphiques Discussion :

getopts - plusieurs options/arguments


Sujet :

Applications et environnements graphiques

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par défaut getopts - plusieurs options/arguments
    Je souhaite réaliser une action en fonction des options passé au script lors du lancement. Ces options contiennent des arguments.

    ex : ./script.sh -a application -m maj
    où, -a et -m sont des options suivi de leurs arguments. A savoir, si l'option -a est utilisé, elle doit être impérativement suivi par l'option -m

    Or, je but sur le fait qu'il y ai plusieurs option à arguments. J'ai essayé avec getopts, ce qui me donne ca (très moche je suppose mais qui fonctionne)
    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
    # CHOIX ARGS
    while getopts :lha:m: OPTION;
    do
            case $OPTION in
                    l) listing ;;
                    h) usage ;;
                    a) apply=$OPTARG ;;
                    m) type=$OPTARG
                       action ;;
                    :) echo "$OPTARG need args"
                       exit 5 ;;
                    \?) echo "option '$OPTARG' incorrecte"
                       exit 3 ;;
            esac
    done
    Avec ce que j'ai fait au dessus, il n'y a pas de contrôle d'erreur, si je fais un -a -m, -m devient argument de -a ... C'est super pas sécure du tout. Auriez-vous des idées qui pourrait me permettre de dompter getopts ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Il te suffit dans ton a) de faire un case "${OPTARG}" in ... où tu testes que l'argument ne commence pas par un "-"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par défaut
    Merci,
    je vais tenter ceci. Je reviens vers vous pour confirmer/infirmer le fonctionnement.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 142
    Par défaut
    Bonjour,

    j'ai tenté ce que tu m'as proposé, mais je me retrouve avec une erreur de syntaxe que je n'arrive pas a élucider :

    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
    while getopts :lha:m: OPTION;
    do
            case $OPTION in
                    l) listing ;;
                    h) usage ;;
                    a) case "${OPTARG}" in
                            -m) echo "option -a neccessite un argument"
                                exit 3 ;;
                            *) apply=$OPTARG ;;
                       esac
                    m) type=$OPTARG
                       action ;;
                    :) echo "$OPTARG need args"
                       exit 5 ;;
                    \?) echo "option '$OPTARG' incorrecte. Lancer "maintenance.sh -h" pour visualiser l'aide"
                       exit 3 ;;
            esac
    done
    Le système me ressort un problème de parenthèse à la ligne : m)

    As-tu une idée ?

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Tout simplement parce que tu as oublié de fermer le case du "a)" avec ";;" :

    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
    while getopts :lha:m: OPTION;
    do
            case $OPTION in
                    l) listing ;;
                    h) usage ;;
                    a) case "${OPTARG}" in
                            -m) echo "option -a neccessite un argument"
                                exit 3 ;;
                            *) apply=$OPTARG ;;
                       esac
                    ;;
                    m) type=$OPTARG
                       action ;;
                    :) echo "$OPTARG need args"
                       exit 5 ;;
                    \?) echo "option '$OPTARG' incorrecte. Lancer "maintenance.sh -h" pour visualiser l'aide"
                       exit 3 ;;
            esac
    done

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une boite avec plusieurs options
    Par Kimado dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 11/11/2008, 22h28
  2. getopt, plusieurs arguments a une option
    Par Tex-Twil dans le forum Linux
    Réponses: 3
    Dernier message: 03/02/2008, 20h01
  3. Getopt, liste d'argument assignée à une option
    Par gobgob dans le forum Modules
    Réponses: 3
    Dernier message: 19/01/2007, 11h02
  4. Réponses: 3
    Dernier message: 21/08/2006, 13h04

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