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) Impossible d'utiliser Getopts ?


Sujet :

Linux

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut (Bash) Impossible d'utiliser Getopts ?
    Bonjour,

    J'essaie d'utiliser la commande getopts. ceci étant quand j'exécute mon code, il ne se passe rien...Il ne rentre même dans dans la boucle while...

    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 "f:t:n:d:" OPTION
    	do
    		case $OPTION in 
    		f) 
                            export folder=$OPTARG
    			;;
    		t) 
    			object_type=$OPTARG
    			;;
    		n) 
    			object_name=$OPTARG
    			;;
    		d) #
    			target=$OPTARG
    			;;
    		esac
    	done
    echo $folder

    J'ai regardé sous /usr/bin/ j'ai un fichier getopt.exe.
    Est ce suffisant ?

    Pourriez vous me donner quelques pistes de reflexions.

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Je ne vois pas d'erreur, la seule chose que je peux te suggérer est d'insérer un caractère : --> (":f:t:n:d:"). Cela permet de mieux gérer les anomalies (cf le script).

    Pour tracer le script, tu peux faire :
    sh -x nom_de_script


    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
    while getopts ":f:t:n:d:" OPTION
    	do
    		case $OPTION in 
    		f) 
                            export folder=$OPTARG
    			;;
    		t) 
    			object_type=$OPTARG
    			;;
    		n) 
    			object_name=$OPTARG
    			;;
    		d) #
    			target=$OPTARG
    			;;
    		:) 
    			echo "*** OPTION \"$OPTARG\" sans arg"
    			exit 1
    			;;
    		\?) 
    			echo "*** OPTION $OPTARG inconnue !!!"
    			exit 1
    			;;
    		esac
    	done
    echo $folder

  3. #3
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    J'ai testé avec Bash et Zsh, le code marche bien chez moi. Quand je passe l'option -f, il affiche l'argument qui suit. Quand j'oublie un argument, il y a une erreur et pareil si j'utilise une mauvaise option.

    Tu pourrais montrer comment tu testes et indiquer quel Shell tu utilises ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    Tout d'abord merci de votre aide.

    Alors j'ai simplifié mon shell à l'extreme :

    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
    #!/bin/bash
    while getopts ":f:n:" OPTION
    do
    	case $OPTION in 
    	f)
    		echo $OPTARG
    		export object=$OPTARG
    		;;
    	n)
    		echo $OPTARG
    		export name=$OPTARG
    		;;
    	?)
    		echo "rrr"
    		;;
    	esac
    done
    echo $name
    echo $object

    pour tester, je tape la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sh -x test_parameter.bash -f test
    ce à quoi il répond :
    +getopts :f:n OPTION
    getopts: not found
    +echo

    +echo
    Voilà...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    Je suis désespérée par ce problème...
    Faut il un fichier style getopts.exe pour pouvoir utiliser cette commande ?

  6. #6
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Hé bien voilà !

    Le message d'erreur est clair (il aurait fallu le donner dès le début) : Mais c'est étonnant puisque sur tous les Shells récents, getopts est une builtin, c'est donc intégré au shell et ça n'a pas besoin de binaire extérieur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ type getopts
    getopts is a shell builtin
    Tu pourrais indiquer quel système d'exploitation tu utilises ? C'est étonnant de parler de fichier "getopt.exe" si tu n'es pas sous Windows (sous Linux, j'ai un fichier /usr/bin/getopt). Peux-tu aussi indiquer quel Shell et quelle version tu utilises ? Essaie avec un autre Shell (sh, ksh, zsh...) dis-nous si tu as encore un problème.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    En effet, si je fais (via cygwin) :
    $ type getopts
    j'obtiens bien
    getopts is a shell builtin
    Dans l'arborescence, je suis allée voir dans le répertoire cygwin et c'est là que j'ai vu getopt.exe

    En faisant un , je trouve également getopt.exe

    le OS : Windows 2003.

    je vais essayer dans un ksh pour voir...
    Je vous donne des infos asap.

    merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    ... Je ne pense pas être en mesure en fait d'interpréter un script ksh...
    Quand je veux exécuter un script ksh, j'ai en retour le message : bad interpreter....

    une solution ?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    Je reviens à la charge...
    Je n'ai absoluement rien changer... Et là voilà ce qu'il se passe :

    1. Voici mon script.
    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
    #!/bin/bash
     
    while getopts ":f:t:n:d:" OPTION
    	do
    		case "$OPTION" in 
    		f) 
                            export folder=$OPTARG
    			;;
    		t) 
    			export object_type=$OPTARG
    			;;
    		n) 
    			object_name=$OPTARG
    			;;
    		d) #
    			target=$OPTARG
    			;;
    		:) 
    			echo "*** OPTION $OPTARG inconnue !!!"
    			export folder="vide"
    			;;
    		esac
    	done
    echo $folder
    2. Maintenant voici différents scénarios...les screenshots sont réalisés séquentiellement et chronologiquement...


    Alors honnetement n'ayant rien changé, j'ai du mal à voir pourquoi cela fonctionne tout d'un coup... J'ai aussi du mal à voir pourquoi le rafraichissement ne fonctionne pas...

    Je suis désemparée

    Edit :
    en modifiant mon script tel que :
    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
    #!/bin/bash
     
    while getopts ":f:t:n:d:" OPTION
    	do
    		case $OPTION in 
    		f) 
                            export folder=$OPTARG
    			echo "cas f"
    			;;
    		t) 
    			export object_type=$OPTARG
    			;;
    		n) 
    			object_name=$OPTARG
    			;;
    		d) #
    			target=$OPTARG
    			;;
    		:) 
    			echo "*** OPTION $OPTARG inconnue !!!"
    			echo test
    			export folder="vide"
    			;;
    		esac
    	done
    echo $folder
    je me rends compte que pour la seconde exécution du programme avec le paramètre -f, il ne passe pas dans le case...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Par défaut
    Dans le genre, je me maudis....

    en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ./test_parameter.bash -f test
    tout fonctionne tellement mieux...

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

Discussions similaires

  1. Impossible d'utiliser KDE
    Par Thrystan dans le forum KDE
    Réponses: 1
    Dernier message: 05/01/2006, 16h01
  2. DAO impossible d'utiliser une fonction dans un requete
    Par exter666 dans le forum VBA Access
    Réponses: 10
    Dernier message: 24/09/2005, 17h15
  3. Impossible d'utiliser DISTINCT avec des types image et ntext
    Par azlinch dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 17h43
  4. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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