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 :

Sortie d'un case dans un autre


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et applicatif
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et applicatif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut Sortie d'un case dans un autre
    Bonjour à tous,

    Alors le titre est pas forcément parlant, pourtant ce que je cherche à faire me parait pas compliqué en soit mais je galère un peu...

    J'ai une structure case avec plusieurs choix, dont certains qui impliquent une nouvelle structure case imbriquée. (En gros une sortie de menu, qui amène à un autre etc...).
    L'idée étant que quand je sors d'un menu je revienne au précédent (et si je suis au premier, alors je sors du script).

    Mais mon soucis est que peu importe dans quel sous-niveau de mon menu je suis, si j'entre la valeur attendue pour sortir, je sors complètement du script.

    Un extrait du script (vous occupez pas de certains mots, j'ai des fonctions définies ailleurs mais qui n'impactent pas mon problème actuel) :

    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
    until [ $choix_menu_dest -eq 0 ]
    do
            menu_dest
            choix_menu_dest2=`echo $choix_menu_dest | tr A-Z a-z`
     
            case $choix_menu_dest2 in
                    0)
                            echo
                            echo "Bonne journee !"
                            break
            ;;
                    all)
                            for i in `cat $dbm_remote $central_lognes $mail2print`
                            do
                                    fic_dest=/mnt/$i/$fichier
                                    copie
                            done
                            for i in `cat $workstations`
                            do
                                    to_mount $i
                                    fic_dest=/mnt/$i/$fichier
                                    copie
                                    to_unmount $i
                            done
                            continue
            ;;
                    1)
                            menu_central_mmo
                            choix_menu_central_mmo2=`echo $choix_menu_central_mmo | tr A-Z a-z`
     
                            case $choix_menu_central_mmo2 in
                                    0)
                                            break
                            ;;
                                    all)
                                            for i in `cat $central_lognes`
                                            do
                                                    fic_dest=/mnt/$i/$fichier
                                                    copie
                                            done
                                            continue
                            ;;
    Alors j'ai pas fermé les "case esac" dans le code ci-dessus parce que je poste pas tout le script (plus de 900 lignes avec pas mal de répétitions j'vois pas trop l'intérêt ).
    A mon avis mon problème se situe plutôt au niveau de mon break qui doit me sortir de la boucle initiale au lieu de sortir.

    Merci de votre aide.

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu peux tester ton code en isolant l'inbrication dans une fonction
    si le pb disparait c est le break qui passe au travers et qui fait sauter l imbrication

  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
    Bonjour
    Citation Envoyé par veis Voir le message
    A mon avis mon problème se situe plutôt au niveau de mon break qui doit me sortir de la boucle initiale au lieu de sortir.
    Au lieu de sortir de quoi ??? Si t'avais fini cette phrase t'aurais la réponse à ta question. Tu as une seule boucle (le until du haut) et le but de break est de sortir de la première boucle dans laquelle il se trouve. Fatalement, même si tu es en bas du 36000° case, le break te fera sortir du until du haut.

    Si tu veux des menus imbriqués, avec boucle sur le menu inférieur tant que 0 n'a pas été tapé, te faut des boucles imbriquées. Par ailleurs tu devrais t'intéresser à select qui est fait justement pour créer des menus et attendre une réponse...
    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 averti
    Homme Profil pro
    Administrateur systèmes et applicatif
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et applicatif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    Au lieu de sortir du case, désolé Sve@r, petite inattention de ma part, j'ai oublié de finir ma phrase (mais dans ma tête elle était finie, si si je le jure !).
    Donc c'est ce que j'pensais, merci d'avoir confirmé mes soupçons.

    Pour ce qui est de select, je m'y suis intéressé, mais ça ne fait pas vraiment ce que je veux, ou alors il y a d'autres manière de l'utiliser mais je n'ai pas trouvé dans le man... (principalement pour la mise en forme qui est dégueulasse je trouve).

    En tout cas merci pour l'aide, j'vais donc imbriquer une autre boucle dans la première.

    Bonne journée.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,
    Je ne comprends pas trop le besoin de boucles imbriqués ici, une seul boucle semble suffisant, ce qui semble gêner le bon fonctionnement du programme, ceux sont les différents "break" et "continue" qui semblent être posé pour le traitement des case alors que c'est fait pour traiter des boucles.

    Le ';;' du case force la sortie , voici en exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo $toto
    1
    $ case $toto in 0) echo bobo; ;; 1) echo titi; ;; 1) echo toto; ;; esac
    titi
    Comme on peut le voir, le case n'execute que "echo titi" (premier cas vrai du case) mais pas "echo toto" (deuxieme cas vrai) qui pourtant est sur la même condition.

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et applicatif
    Inscrit en
    Novembre 2004
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et applicatif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2004
    Messages : 27
    Par défaut
    J'ai fait comme ça parce que l'idée est que, tant que je ne tape pas 0 pour sortir, je reste sur le menu, les autres choix effectuent des actions, mais je reviens toujours sur le même menu tant que je n'ai pas décidé de sortir.
    Mais en faisant une boucle par menu j'arrive au résultat que je veux, donc le sujet est résolu.

    Merci pour votre aide

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par veis Voir le message
    tant que je ne tape pas 0 pour sortir, je reste sur le menu
    je reviens toujours sur le même menu tant que je n'ai pas décidé de sortir.
    Si ceci n'est pas la description informelle d'une boucle, je veux bien être pendu!

    Mais en faisant une boucle par menu j'arrive au résultat que je veux
    du coup, ce n'est pas vraiment surprenant!

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

Discussions similaires

  1. [XL-2007] copier certains caractères d´une case dans un autre fichier
    Par djjilou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/06/2012, 16h32
  2. [XL-2003] Copier les propriétés d'une case dans une autre
    Par vapordinateur dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/03/2010, 09h13
  3. Réponses: 3
    Dernier message: 28/11/2008, 08h21
  4. {VBA Excel} Colorier des cases selon la valeur dans une autre
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2008, 09h56
  5. Récupérer la sortie standard dans une autre classe
    Par EvilAngel dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/12/2006, 17h15

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