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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    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
    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 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    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 )

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    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 confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    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

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web (en formation)
    Inscrit en
    Septembre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    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
    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.

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

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