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 :

passage d'une chaine de paramètres à une fonction


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut passage d'une chaine de paramètres à une fonction
    Bonjour,

    Je souhaite créer une fonction qui génère un menu dont les choix sont transmis en paramètres à la fonction (sauf le choix Quitter)

    voici la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function Menu()
    {
            echo "Que voulez vous faire ?"
            echo ""
            for ((n=1; n<=$#; n++))
            do
                    echo "Option ("$n") : "${!n}
            done
            echo "Choix (q): Quitter"
            echo ""
            echo ""
            echo "Votre choix ? : "
    Pour transmettre les choix en paramètres, l'idée est de créer une chaine $listeParam qui contiendrait "choix 1 choix 2 choix 3"
    Or vu comme ça c'est 6 paramètres qui sont transmis à la fonction (choix, 1, choix, 2, choix, 3) et non 3 (choix 1, choix 2, choix 3) à cause des espaces

    Voici comment je procède:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nbChoix=3 
    listeParam=""
    for ((i=1; i<=nbChoix; i++))
    do
            listeParam=$listeParam"Choix "$i" "
    done
    Menu $listeParam
    Bien sur si je retire l'espace entre choix et $i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeParam=$listeParam"choix"$i" "
    j'aurai bien Choix1 Choix2 Choix3, mais le but est de remplacer "Choix n"par du texte contenant des espaces

    Voici ce que je souhaiterais obtenir comme résultat:

    Option (1) : Choix 1
    Option (2) : Choix 2
    Option (3) : Choix 3
    Option (q): Quitter

    Si je rajoute un \:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeParam=$listeParam"choix\ "$i" "
    ça sort:

    Option (1) : choix\
    Option (2) : 1
    Option (3) : choix\
    Option (4) : 2
    Option (5) : choix\
    Option (6) : 3
    Option (q): Quitter

    J'ai essayé aussi avec "eval" mais j'ai des erreurs de "commande inconnue"


    Quelqu'un aurait il une idée sur la façon dont je dois procéder ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    optionsMenu1=( 'choix 1' 'choix 2' 'choix 3' )
    Menu() {
            echo "Que voulez vous faire ?"
            echo ""
            for ((n=1; n<=$#; n++))
            do echo "Option ("$n") : "${!n}
            done
            echo "Choix (q): Quitter"
            echo ""
            echo ""
            echo "Votre choix ? : "
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Menu "${optionsMenu1[@]}"
    Que voulez vous faire ?
     
    Option (1) : choix 1
    Option (2) : choix 2
    Option (3) : choix 3
    Choix (q): Quitter
     
     
    Votre choix ? :
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 88
    Points : 40
    Points
    40
    Par défaut
    Bien vu N_BaH, je n'avais pas pensé à générer une liste plutôt qu'une chaine

    ainsi le code devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    nbChoix=3
    for ((i=1; i<=nbChoix; i++))
    do
             optionsMenu[$(( i-1 ))]="Choix "$i" "
    done
    Menu "${optionsMenu[@]}"
    La fonction reste la même.

    Le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Que voulez vous faire ?
     
    Choix (1) : Choix 1
    Choix (2) : Choix 2
    Choix (3) : Choix 3
    Choix (q): Quitter
     
     
    Votre choix ? :
    Génial, un grand merci à toi N_BaH

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/08/2011, 12h57
  2. Comperer une chaine hexa avec une chaine non hexa
    Par kaboume dans le forum Développement
    Réponses: 2
    Dernier message: 21/05/2010, 16h21
  3. [Batch] Créer une chaine à partir d'une variable et d'une autre chaine
    Par mlle lain dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 10/11/2009, 16h26
  4. [MySQL] Passage d'une chaine de caractère à une requête via une fonction
    Par jalam dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/09/2009, 17h58
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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