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

Linux Discussion :

Bash et getopts


Sujet :

Linux

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Par défaut Bash et getopts
    bonjour,

    Je suis en train de developper un programme en bash utilisant des arguments.
    Mon probléme ce situe dans la gestion des "arguments long" (comme: --login ou enocre --servername) j'arrive à gérer les petits arguments avec getopts de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while getopts "ab:cda:" Option do
           case $Option in 
                  a ) ;;
                  b ) ;;
                  etc ....
                  * ) ;;
            esac   
    done
    mais avec la même techinque je ne peux pas gérer les arguments long de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    while ? Option do
            case $Option in 
                   login) ;;
                   servername ) ;;
                    etc ...
                    * ) ;;
            esac
    done
    voilà si quelqu'un sait comment on peut gérer les arguments longs en bash je le remerci d'avance

    ++

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Si c'est comme en langage c, case ne sert que pour des variables entières.
    Donc ça fonctionne pour un caractère puisqu'un caractère est un entier en valeur ascii. Mais une chaîne de caractère ne remplit pas ce critère.

    Voilà pour ce qui est de la cause du problème.

    Pour la solution, je ne sais pas
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 64
    Par défaut re
    oki merci je vais la faire old school (avec les $1 $2 etc ...)
    ++

  4. #4
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Tiens, je livre un décodage de paramètre que j'avais fais, en bash, il y a quelques temps ...

    C'est fonctionnel (c'est en prod.), même si ce n'est pas forcément un modèle d'élégance car il faut TOUT gérer explicitement.

    Par contre, je gère ainsi les option courtes (-t), longues (--tape) et avec paramètres (--tape on)

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    _TAPE="TRUE"
    _DISK="TRUE"
    _NEXT=""
    _PARAMETRES=$@
     
    if [ -z $_PARAMETRES ] ; then
      _PARAMETRES="--usage"
    fi
     
    for _PARAM in $_PARAMETRES ; do
      if [ -z $_NEXT ] ; then
        case $_PARAM in
          -h | --help | -u | --usage )
            echo "Script de sauvegarde"
            echo ""
            echo "Parametres :"
            echo "        [-h | --help | -u | --usage]"
            echo "                Affiche ce message d'aide"
            echo "        [-v | --version]"
            echo "                Affiche la version"
            echo "        [-t on|off] | [--tape on|off]"
            echo "                Active ou desactive la sauvegarde sur bande"
            echo "        [-d on|off] | [--disk on|off]"
            echo "                Active ou desactive la sauvegarde sur disque"
            echo ""
            echo "Par defaut, la sauvegarde est active sur disque et sur bande"
            exit 0
            ;;
          -v | --version )
            _alarm "Script de sauvegarde"
            _alarm "2Eurocents"
            _alarm "Version du 9 Mars 2004"
            exit 0
            ;;
          -d | --disk )
            _NEXT="--disk"
            ;;
          -t | --tape )
            _NEXT="--tape"
            ;;
          * )
            echo "Option $_PARAM inconnue !!!"
            exit
            ;;
        esac
      else
        case $_PARAM in
          on )
            if [ "$_NEXT" = "--disk" ] ; then _DISK="TRUE" ; fi
            if [ "$_NEXT" = "--tape" ] ; then _TAPE="TRUE" ; fi
            ;;
          off )
            if [ "$_NEXT" = "--disk" ] ; then unset _DISK ; fi
            if [ "$_NEXT" = "--tape" ] ; then unset _TAPE ; fi
            ;;
          * )
            echo "Parametre $_PARAM de l'option $_NEXT inconnu !!!"
            exit
            ;;
        esac
        unset _NEXT
      fi
    done
    Maintenant, je n'ai plus ces préoccupations ... je fais tout en PERL

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Hum, le script en prod de 2eurocents n'a pas trop l'air de corroborer mes dires.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  6. #6
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    bonjour,
    Voici une façon de gérer les options longue avec getopt. Il suffit de dire que "-" est une option avec paramètre et le paramètre est l'option
    Par contre si l'option longue peut aussi avoir des paramètres, ça n'a pas l'aire de marcher...

    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
    #!/bin/bash
     
    while getopts "vh-:" opt ; do
    	if [ $opt = "-" ] ; then
    		case $OPTARG in
    			help ) opt="h" ;;
    			version ) opt="v" ;;
    			* ) echo "option longue inconnue..." ;;
    		esac
    	fi
    	case $opt in
    		h ) echo "help...." ;;
    		v ) echo "version..." ;;
    		? ) echo "option inconnue" ;;
    	esac
    done

  7. #7
    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
    Bonjour,
    J'ai trouvé la solution afin d'utiliser les options avec des arguments, je vais bientôt le mettre dans la partie "trucs et astuces" dans la partie "shell" dont j'ai déjà mis 2 commentaires concernant getopts, le troisième commentaire sera consacré aux paramètres long avec paramètres.

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

Discussions similaires

  1. Utilisation du getopts dans une fonction (Bash/ksh)
    Par abou33 dans le forum Shell et commandes GNU
    Réponses: 17
    Dernier message: 19/05/2015, 16h26
  2. [bash] getopt + commande find = KO
    Par malgashe120 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/03/2014, 14h03
  3. Requête POST dans un script bash
    Par desperado dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 22h38
  4. (Bash) Impossible d'utiliser Getopts ?
    Par muse19 dans le forum Linux
    Réponses: 9
    Dernier message: 11/09/2007, 17h07
  5. équivalent à getopts de bash
    Par narmataru dans le forum Modules
    Réponses: 2
    Dernier message: 27/01/2005, 08h49

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