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 :

Extraction variables boucle for


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web (en formation)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Extraction variables boucle for
    Bonjour,
    Je voudrai extraire d'une boucle for des variables incrémentées mais je ne sais pas comment procéder autrement qu'en passant par des fichiers intermédiaires et c'est justement ce que je veux éviter.
    J'ai essayé ce genre de chose mais sans succès.

    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
    echo -n " Combien de variables ? "
    read xvar
     
    for i in `seq 1 $xvar`
    	do
    		echo -n " Variable "$i" ? "
    		read variable$i
    		echo " "
    		echo " La variable variable$i = "$variable$i" "
    		echo " "
    	done
    echo " Variable1 = "$variable1" "
    echo " Variable2 = "$variable2" "
    echo " Variable3 = "$variable3" "
    echo " ......... = ".........." "
    echo " VariableX = "$variableX" "
    Merci d'avance pour votre aide.

  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
    Bonjour,

    si ton script est en bash, tu devrais utiliser un tableau.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Bonjour,

    La gestion par tableau comme suggéré par N_BaH est plus simple, sinon la seule méthode que je connaisse est via l'indirection des variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ xx=5
    $ read v$xx <<<bobo
    $ echo $v5
    bobo
    $ echo $v$xx
    5
    $ var=v$xx
    $ echo $var
    v5
    $ echo ${!var}
    bobo
    Ici, la dernière commande est ce que l'on appelle l'indirection de variable.
    On valorise une variable avec le nom d'une autre variable, puis par ${!<variable_avec_nom_autre_variable_en_valeur>} on accède à la valeur de la variable voulu...(pas super claire mon explication )
    Cordialement.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Mis à part les tableaux, qui sont effectivement la meilleure solution à faire en bash, tu as possibilité de réaliser ce genre de chose en passant par eval qui sert à créer une instruction shell à partir d'une autre.

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/sh
     
    for i in $(seq 5)
    do
    	echo "Saisir la variable $i"
    	eval read var$i
    done
     
    echo "var1=$var1"
    echo "var2=$var2"
    echo "var3=$var3"
    echo "var4=$var4"
    echo "var5=$var5"
    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]

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Ici, il y a confusion, car il n'y a pas besoin de "eval" pour la création de variable via un nommage relatif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ unset var1
    $ xx=1
    $ read var$xx <<<"bob"
    $ echo $var1
    bob
    Le problème est plus sur la lecture de la valeur d'une variable via un nommage relatif de cette variable:
    Comme on peut le voir, ici, cela ne nous affiche pas le contenu de la variable "var1" mais juste le contenu de la variable "var" (donc rien car elle n'elle n'existe pas) et de la variable "xx"
    si on veut le faire avec "eval", la syntaxe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ eval echo \$var$xx
    bob
    Cordialement.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web (en formation)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Merci pour vos réponses.

    Au départ je pensais faire avec des variables extraites et les mettre chacune dans un fichier comme ceci :

    echo -n " Combien de variables ? "
    read xvar

    for i in `seq 1 $xvar`
    do
    echo -n " Variable "$i" ? "
    read variable$i
    echo $Variable$i > fichier$i
    done

    mais je ne vois pas comment, je ne sais pas si c'est possible et encore moins si c'est une bonne solution.

    Je n'ai encore jamais utiliser les tableaux mais je vais essayer et voir ce que cela donne.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gillout Voir le message
    Au départ je pensais faire avec des variables extraites et les mettre chacune dans un fichier comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    echo -n " Combien de variables ? "
    read xvar
     
    for i in `seq 1 $xvar`
    	do
    		echo -n " Variable "$i" ? "
    		read variable$i
    		echo $Variable$i > fichier$i
    	done
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    eval echo \$var$i >fichier$i


    Citation Envoyé par gillout Voir le message
    et encore moins si c'est une bonne solution.
    Ah ben comme tu ne nous as rien dit sur ton besoin là on ne peut pas te répondre. Mais dans 99% des cas, écrire un fichier l'est rarement. Et écrire n fichiers encore moins...
    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]

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Bon, je ne vois pas trop l'utilité de créer une variable différente pour ensuite juste l'utiliser pour insérer sa valeur dans un fichier, autant utiliser la même variable qui changera de valeur à chaque tour de boucle...
    Donc voici un truc qui fait le boulot (création de n variables et de n fichiers, et à privilégier puisque en total effet de bord ) sans passer par des tableaux (car il est vrai que c'est compliqué de faire ${tableau[indice]}:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat sc2.sh 
    echo -n " Combien de variables ? "
    read xvar
     
    for i in $(seq 1 $xvar)
    do
    	echo -n " Variable ${i} ? "
    	read variable$i
    	echo ${!_} > fichier$i
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ sh ./sc2.sh 
     Combien de variables ? 2
     Variable 1 ? foo
     Variable 2 ? bar
    $ cat fichier1
    foo
    $ cat fichier2
    bar
    Cordialement.

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bon, je ne vois pas trop l'utilité de créer une variable différente pour ensuite juste l'utiliser pour insérer sa valeur dans un fichier, autant utiliser la même variable qui changera de valeur à chaque tour de boucle...
    Donc voici un truc qui fait le boulot (création de n variables et de n fichiers
    Hey, ce n'est pas sérieux. Tu lui dis que ce n'est pas à faire puis tu le fais. Vaut mieux qu'il nous expose le problème qui a motivé l'élaboration de sa solution si maladroite afin qu'on lui propose en retour une solution performante et fiable.
    Bien vu toutefois l'utilisation de la variable !_ issue du read ce qu évite de passer par eval. Préciser cependant que cette variable n'est utilisable qu'une seule fois et immédiatement après ledit read. Toute instruction autre placée après le read fait perdre son contenu...

    Citation Envoyé par gillout Voir le message
    Au départ je pensais faire avec des variables extraites et les mettre chacune dans un fichier...mais je ne vois pas comment, je ne sais pas si c'est possible et encore moins si c'est une bonne solution.

    Je n'ai encore jamais utiliser les tableaux mais je vais essayer et voir ce que cela donne.
    En programmation il y a une règle simple: une variable qui n'est utilisée qu'une seule fois est alors une variable inutile (il y en a même un qui a mis dans sa signature "une variable en moins c'est une erreur en moins").
    Cette règle est parfois un peu assouplie quand on met en place des paramètres en début de programme (on crée alors des variables pour ces paramètres en début de code alors qu'elles sont parfois utilisées qu'une seule fois mais c'est pour faciliter l'évolutivité du programme => la modification d'un ou d'un autre paramètre sera concentrée en un seul point du code) mais visiblement ce n'est pas le cas chez-toi. D'où la remarque de disedorgue quand il dit qu'on peut faire le même travail avec une seule variable qui prendra n valeurs plutôt que n variables qui prendront une seule valeur...
    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]

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour,

    En programmation il y a une règle simple: une variable qui n'est utilisée qu'une seule fois est alors une variable inutile
    Laquelle des deux écritures préfères-tu?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creer_monstre(tete.taille, yeux.couleur, brushing.resistance)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creer_monstre(23, 6, 23)
    Utiliser une variable une seule fois peut rajouter du sens. Pas mal pour débugguer, non?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Laquelle des deux écritures préfères-tu?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    creer_monstre(taille=23, couleur=6, resistance=23)


    Citation Envoyé par Flodelarab Voir le message
    Utiliser une variable une seule fois peut rajouter du sens. Pas mal pour débugguer, non?
    Il y a toujours des cas particuliers, effectivement, mais tu concèderas j'en suis sûr que ces cas restent justement particuliers (tu le dis toi-même "pour rajouter du sens" ou "pour débugguer"). Et puis ton micro exemple n'est pas très honnête car si tu passes "brushing.resistance" à ta fonction (un membre d'une structure) c'est très certainement que ton truc était assez complexe pour mériter la création d'une structure et que ses membres sont alors utilisés (ou susceptibles d'êre utilisés) bien plus d'une fois non ?
    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]

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web (en formation)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    et merci à tous pour vos réponses.

    J'ai suivi les conseils de départ de N_BaH et j'ai donc utilisé les tableaux, c'est très bien pour ce que je voulais faire.
    J'essaye à présent d'améliorer l'ensemble de mon script et j'ai un nouveau problème qui se pose à moi :
    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
     
    echo "Combien de valeur de chaque ?"
    read x
    for i in `seq 1 $x`
       do
          echo " A $i ? "
          read a$i
          echo " B $i ? "
          read b$i
          echo " C $i ? "
          read c$i
          echo " D $i ? "
          read d$i
          if [ "$c5"="$b4" ]
             then
                i=$i-1
          fi
       done
    Le code présent est simplifié car il y a pas mal d'autres choses comme des boucles while, case, ainsi que des conditions if, tout ça dans la boucle for.
    Est-il possible de revenir à la question A une fois à la question D par une ligne du genre (i=$i-1) comme indiquée dans le code ?

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Pas testé:
    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
     
    echo "Combien de valeur de chaque ?"
    read x
    XX=($(seq 1 $x))
    j=0
    while i=${XX[$j]} && ((j++-x))
       do
          echo " A $i ? "
          read a$i
          echo " B $i ? "
          read b$i
          echo " C $i ? "
          read c$i
          echo " D $i ? "
          read d$i
          if [ "$c5"="$b4" ]
             then
                ((--j))
          fi
       done
    Cordialement.

  14. #14
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    gillout, prends du recul. Crois-tu que ton utilisateur va être enchanté de passer par ton questionnaire interminable de 4xn questions sans compter les retours en arrière? C'est l'enfer.

    Ne crois-tu pas qu'il vaudrait mieux demander à l'utilisateur de fournir un fichier contenant un tableau de valeurs que tu analyserais? Alors, tu aurais juste à indiquer les raisons du rejet du tableau.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web (en formation)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    Pas testé:
    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
    echo "Combien de valeur de chaque ?"
    read x
    XX=($(seq 1 $x))
    j=0
    while i=${XX[$j]} && ((j++-x))
       do
          echo " A $i ? "
          read a$i
          echo " B $i ? "
          read b$i
          echo " C $i ? "
          read c$i
          echo " D $i ? "
          read d$i
          if [ "$c5"="$b4" ]
             then
                ((--j))
          fi
       done
    Cette solution ne fonctionne pas et je préfèrerai avoir si possible une solution avec la boucle for, et s'il n'y en a pas je chercherai une autre solution que le retour à la question A.

    gillout, prends du recul. Crois-tu que ton utilisateur va être enchanté de passer par ton questionnaire interminable de 4xn questions sans compter les retours en arrière? C'est l'enfer.

    Ne crois-tu pas qu'il vaudrait mieux demander à l'utilisateur de fournir un fichier contenant un tableau de valeurs que tu analyserais? Alors, tu aurais juste à indiquer les raisons du rejet du tableau.
    Ce n'est pas du tout ce que tu crois mais au contraire, cela me permettrai de redemander juste une chose et non de tout refaire. Et il n' y a pas tant de question que cela en fait.
    Merci quand même pour votre aide.

    J'essaye de trouver une autre voie.

  16. #16
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gillout Voir le message
    Ce n'est pas du tout ce que tu crois mais au contraire, cela me permettrai de redemander juste une chose et non de tout refaire. Et il n' y a pas tant de question que cela en fait.
    Le problème c'est qu'on ne voit pas trop bien où tu veux en venir. T'es parti d'un problème théorique (c'est à dire en dehors de toute application pratique) de saisies de variables puis tu nous parles de redemander des choses, bref on travaille un peu en aveugle.

    Quoi qu'il en soit, les choses sont simples: si tu as une action (saisie d'un truc, de deux trucs, de n trucs) qui fonctionne, quelle que soit la façon dont a été programmée l'action, si tu veux la recommencer tu dois l'insérer dans une boucle.

    Exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while true
    do
        action  # A toi ici de programmer le code complet de l'action quel qu'il soit
        echo -n "Voulez-vous recommencer (O/N) ?"
        read rep
        test "$rep" != "o" -a "$rep" != "O" && break
    done

    A partir de là, toutes les déclinaisons sont possibles (comme par exemple boucler sur la question si celle-ci ne correspond pas à "O" ou "N") mais c'est le fonctionnement de base.

    Bien entendu, si l'action est très complexe, ou si tu as envie de rendre ton code plus ou moins souple, rien ne t'interdit de la déporter dans une fonction
    Exemple
    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
    action()
    {
        ...  # tout le code de l'action aussi complexe soit-il...
    }
    while true
    do
        # Action
        action
     
        while true
        do
            echo -n "Voulez-vous recommencer (O/N) ?"
            read rep
            case "$rep" in
                o|O|[oO][uU][iI]) break ;; # Sortie boucle de saisie => fatalement repartira sur la boucle de l'action
                n|N|[nN][oO][nN]) break 2 ;; # Sortie des deux boucles (saisie et action)
                *) echo "Mauvaise réponse - Recommencez"
            esac
        done
    done
    Ainsi, si tu veux répéter l'action tant que l'utilisateur le demande tu le laisses tel quel ; et si un jour tu ne veux plus demander un retour et tu veux que l'action ne s'exécute plus qu'une seule fois tu insères un simple "break" juste avant la seconde boucle.

    Maintenant, perso je préfère les trucs qui ne font que ce qu'ils sont sensés faire sans venir ensuite me poser des questions à la c... Et si je veux qu'ils le fassent plusieurs fois, alors c'est moi qui rajoute mes propres boucles autour du truc en question...
    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]

  17. #17
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Ce n'est pas du tout ce que tu crois mais au contraire, cela me permettrai de redemander juste une chose et non de tout refaire.
    C'est justement le contraire de ton objectif. Si ton script me dit que, dans mon fichier, b4 ne peut pas être égal à c5, je n'ai qu'une chose à changer. Alors que si j'annule l'exécution de ton script par un Ctrl+C, je dois me re-fader l'entrée de tout le tableau.

    Permets moi-moi d'insister en faveur d'un fichier qui contiendrait ton tableau de valeurs.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  18. #18
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 286
    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 286
    Points : 12 743
    Points
    12 743
    Par défaut
    Citation Envoyé par gillout Voir le message
    Bonjour,


    Cette solution ne fonctionne pas et je préfèrerai avoir si possible une solution avec la boucle for, et s'il n'y en a pas je chercherai une autre solution que le retour à la question A.


    Ce n'est pas du tout ce que tu crois mais au contraire, cela me permettrai de redemander juste une chose et non de tout refaire. Et il n' y a pas tant de question que cela en fait.
    Merci quand même pour votre aide.

    J'essaye de trouver une autre voie.
    La solution que je t'ai fourni fonctionne (au moins en bash), et semble répondre à ta question initiale (donc un simple ça ne marche pas n'aide pas à la compréhension).

    Donc, qu'est-ce qui ne marche pas dans la solution que je t'ai donnée ?

    Après, si tu veux la faire avec une boucle for, dans ce cas, il faudra que tu utilises l'autre forme de la boucle for qui existe en bash: for (exrp;expr;expr) qui sera du même tenant que la version avec la boucle while que je t'ai donnée.
    Cordialement.

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web (en formation)
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    disedorgue, la solution que tu avais donné ne fonctionne pas, probablement du au fait que je suis en ksh.

    J'ai fini par trouver une autre solution de remplacement qui ne donne pas exactement ce que je voulais au départ mais je m'en contenterai.

    Merci encore pour vos réponse.

  20. #20
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Le 5 octobre:
    Citation Envoyé par N_BaH Voir le message
    si ton script est en bash, tu devrais utiliser un tableau.
    Le 21 novembre:
    Citation Envoyé par gillout Voir le message
    disedorgue, la solution que tu avais donné ne fonctionne pas, probablement du au fait que je suis en ksh.
    Conclusion: tout vient à point qui sait attendre...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] [VBA] Remplacer un caractére dans une formule par une variable (boucle for)
    Par surikhat dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2015, 19h12
  2. Variable boucle for
    Par Erreip1 dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/06/2013, 13h56
  3. [C# WPF]indexation variable boucle for
    Par luc648 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 07/06/2010, 07h43
  4. [AC-2003] concaténation variable boucle FOR
    Par Lolosan dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/05/2009, 15h35
  5. Affectation de variable boucle FOR à l'intérieur d'une boucle WHILE
    Par Droïde Système7 dans le forum Débuter
    Réponses: 10
    Dernier message: 05/11/2007, 19h11

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