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 :

KSH et plusieurs paramètres


Sujet :

Shell et commandes GNU

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut KSH et plusieurs paramètres
    Bonjour,

    j'ai l'intention de développer un script et faire passer plusieurs paramètres. Malheureusement je ne sais pas comment procéder ...

    En effet j'aimerais que dans un premier temps, tout simplement que
    lorsque je lance le script ./script.ksh , je puisse passer plusieurs paramètres

    ex ./script.ksh -m TOTO -q TITI -s TATA

    sans que l'ordre des paramètres n'ait d'importance

    donc ./script.ksh -q TITI -s TATA -m TOTO

    et ensuite pouvoir récupérer les valeurs de ces paramètres pour les mettre dans une variable

    Voilà en gros je ne sais pas si j 'ai été clair, mais si vous avez une idée cela m'aiderait grandement.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 654
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 654
    Par défaut
    Bonjour,

    tu dois utiliser getopts.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Salut

    Le principe de base dans ce genre de script est
    1) récupérer et mémoriser chaque option présente
    2) supprimer les options des paramètres
    3) commencer le programme et utiliser les options mémorisées quand tu en as l'utilité/le besoin

    Exemple : Ecriture d'un script pouvant recevoir les options "-a" et "–b" sans valeur associée; une fois "-c" avec valeur associée et plusieurs fois "-d" avec valeurs associées

    Code bash : 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
    #!/bin/sh
    # Script qui traite plusieurs options et qui affiche ce qu'il a analysé
    # Options possibles: -a -b -c val -d val [-d val] …
     
    # Récupération de chaque option du script
    while getopts :abc:d: opt
    do
    	# Analyse de l'option reçue
    	case $opt in
    		a)	# Mémorisation option "a" trouvée
    			opt_A="true" ;;
    		b)	# Mémorisation option "b" trouvée
    			opt_B="true" ;;
    		c)	# Mémorisation option "c" trouvée et mémorisation de sa valeur
    			opt_C="true"
    			val_C="$OPTARG" ;;
    		d)	# Mémorisation option "d" trouvée et concaténation de sa valeur
    			opt_D="true"
    			val_D="$val_D $OPTARG" ;;
    		*)
    			echo "Usage: `basename $0` [-a] [-b] [-c val] [-d val1] [-d val2] [fic1 …]"
    			exit 1
    	esac
    done
     
    # Décalage des paramètres pour placer le premier argument non-optionnel en "$1"
    shift `expr $OPTIND1`
     
    # Affichage du résultat de l'analyse
    test –n "$opt_A" && echo "Option A demandée"
    test –n "$opt_B" && echo "Option B demandée"
    test –n "$opt_C && echo "Option C demandée avec la valeur [$val_C]"
    test –n "$opt_D && echo "Option D demandée avec les valeurs [$val_D]"
     
    # Affichage du reste des paramètres s'il y en a
    test $# -ne 0 && echo "Il reste encore $# paramètres qui sont $*" || echo "Il n y a plus de paramètre"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Super ! merci bien j me suis débrouillé en combinant tes infos et celles du man de getopts

    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 :m:q:i: OPT
    do
            case $OPT in
                    m)      Qmgr="$OPTARG";;
                    q)      Queue="$OPTARG";;
                    i)      Mail="$OPTARG";;
                    \?)     echo "$WARNING You must use ./$PGMNAME [-m QMGR] [-q QUEUE] [-i MAIL]" 
                            echo " Without -q = MANAGE.DEAD.QUEUE "
                            echo " Without -i = show instead of mail send $NORMAL"
                            exit 2
                            ;;
            esac
    done
    	if [ "$Qmgr" == "" ]
    		then 
    			./$PGMNAME -?
    			exit
    		fi


    Peut être codé avec des mouffles mais ca marche nickel

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alexmirage Voir le message
    Super ! merci bien j me suis débrouillé en combinant tes infos et celles du man de getopts

    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 :m:q:i: OPT
    do
            case $OPT in
                    m)      Qmgr="$OPTARG";;
                    q)      Queue="$OPTARG";;
                    i)      Mail="$OPTARG";;
                    \?)     echo "$WARNING You must use ./$PGMNAME [-m QMGR] [-q QUEUE] [-i MAIL]" 
                            echo " Without -q = MANAGE.DEAD.QUEUE "
                            echo " Without -i = show instead of mail send $NORMAL"
                            exit 2
                            ;;
            esac
    done
    	if [ "$Qmgr" == "" ]
    		then 
    			./$PGMNAME -?
    			exit
    		fi


    Peut être codé avec des mouffles mais ca marche nickel
    En dehors de tes variables en majuscules (conventionnellement réservées aux variables système), aller charger un truc aussi lourd qu'un appel récursif juste pour afficher une bête aide...

    Code bash : 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
     
    usage()
    {
    	echo "$WARNING You must use $(basename $0) [-m QMGR] [-q QUEUE] [-i MAIL]" 
    	echo " Without -q = MANAGE.DEAD.QUEUE "
    	echo " Without -i = show instead of mail send $NORMAL"
    }
     
    while getopts :m:q:i: OPT
    do
    	case $OPT in
    		m) Qmgr="$OPTARG";;
    		q) Queue="$OPTARG";;
    		i) Mail="$OPTARG";;
    		\?)
    			usage
    			exit 2
                            ;;
            esac
    done
     
    [ -z "$Qmgr" ] && usage && exit
    ... (suite du code)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/04/2006, 10h30
  2. Fonction qui retourne plusieurs paramètres
    Par diam's dans le forum Langage
    Réponses: 3
    Dernier message: 03/02/2006, 20h11
  3. Réponses: 2
    Dernier message: 12/09/2005, 15h33
  4. Réponses: 4
    Dernier message: 19/04/2005, 13h42
  5. Réponses: 2
    Dernier message: 15/06/2004, 11h22

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