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 du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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.
    L'informatique est une science exacte au comportement aléatoire.

  2. #2
    Membre éclairé 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
    Points : 652
    Points
    652
    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
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  3. #3
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    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 du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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à...
    L'informatique est une science exacte au comportement aléatoire.

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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 ?
    L'informatique est une science exacte au comportement aléatoire.

  6. #6
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    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 du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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
    L'informatique est une science exacte au comportement aléatoire.

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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 ?
    L'informatique est une science exacte au comportement aléatoire.

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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...
    L'informatique est une science exacte au comportement aléatoire.

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    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...
    L'informatique est une science exacte au comportement aléatoire.

+ 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