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

Linux Discussion :

[shell] Déclaration de variables


Sujet :

Linux

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 26
    Points
    26
    Par défaut [shell] Déclaration de variables
    Bonjour, je veux créer automatiquement une liste de vecteurs.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var1[1] = 1
    var1[2] = 2
    var1[3] = 3
     
    var2[1] = 1
    var2[2] = 2
    var2[3] = 3
     
    ...
     
    var1000[1] = 1
    var1000[2] = 2
    var1000[3] = 3
    J'avais pensé utiliser la notation suivante avec des boucles (for ou while)

    mais cela ne fonctionne pas. C'est la partie $I qui ne va pas. Comment y remédier ?

    Remerciements anticipés,

    RM


    NB : J'utilise le bash.

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Merci pour votre réponse mais je continue à avoir un petit problème.

    Voici l'exemple que je vous soumets :

    Soit deux fichiers textes appelés fichier1.txt et fichier2.txt

    Code fichier1.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 abc
    2 def
    3 ghi

    Code fichier2.txt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 abc
    2 def def
    3 ghi

    Mon but est de stocker ces fichiers dans des variables de type chiffre$I[J] et lettre$I[$J] ou I est le nombre de fichiers et J est le nombre de lignes de chaque fichier. Par exemple,

    chiffre2[1] = 1
    chiffre2[2] = 2
    chiffre2[3] = 3

    lettre2[1] = abc
    lettre2[2] = def def
    lettre2[3] = ghi
    Voici mon code sous bash

    Code fichier.sh : 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
    nombre_de_fichiers=2
    I=1
    while [ $I -le $nombre_de_fichiers ]; do
    FILENAME=fichier$I.txt
    J=1
    while read number word
    do
    eval chiffre$I[$J]=$number
    eval lettre$I[$J]=$word
    let J=J+1
    done < $FILENAME
    let I=I+1
    done 
    echo ${chiffre1[*]}
    echo ${lettre1[*]}
    echo ${chiffre2[*]}
    echo ${lettre2[*]}

    Après exécution du code ci-dessus, j'obtiens ceci en sortie écran :
    [J'ajoute des commentaires en rouge]

    $ sh fichier.sh
    fichier.sh: line 1: def: command not found
    1 2 3 # affichage de chiffre1[]
    abc def ghi # affichage de lettre1[]
    1 2 3 # affichage de chiffre2[]
    abc ghi # affichage de lettre2[] <---- ERREUR ! Ce n'est pas le résultat escompté.
    Comme vous pouvez le constater, j'ai un message d'erreur (en bleu) lorsque j'exécute mon code... La conséquence est que lettre2[] ne donne pas le résultat escompté.

    J'obtiens :

    lettre2[1] = abc
    lettre2[2] =
    lettre2[3] = ghi
    Je n'arrive pas à lire correctement la deuxième ligne de fichier2.txt avec eval.
    Comment faire ?

    Merci d'avance,

    RM

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Pour résumer mon précédent message,

    pourquoi le code suivant n'arrive pas à lire la variable b ?

    Code fichier.sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a='abc'
    b='abc def'
    N=3
    I=1
    J=1
    while [ $J -le $N ]; do
    eval aa$I[$J]=$a
    eval bb$I[$J]=$b
    let J=J+1
    done
    echo ${aa1[*]}
    echo ${bb1[*]}

    Voici la copie écran du résultat :

    $ sh fichier.sh
    fichier.sh: line 1: def: command not found
    fichier.sh: line 1: def: command not found
    fichier.sh: line 1: def: command not found
    abc abc abc

    $
    Je me doute que c'est à cause de l'espace contenu dans la variable b. Comment y remédier ?

    Merci

    RM

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par matafan Voir le message
    Merci beaucoup

    Pourriez-vous me dire en quelques mots ce que font \' et '\ dans le cas qui nous intéresse ?

    RM

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Les backslashes servent à protéger les quotes qui suivent, de sorte que les quotes soient inclues dans la chaine passée à eval.

    Sans les \', eval essaie d'évaluer la chaine :
    Ce qui n'est pas correct, a cause de l'espace. Avec simplement ' au lieu de \', on serait dans le même cas cas les quotes seraient supprimées par le shell au moment où il construit la chaine à passer à eval.

    Avec les \', eval essaie d'évaluer la chaine :
    Ce qui est correct puisqu'on a cette fois une seule chaine après le =.

    D'ailleurs, maintenant que j'y réfléchi un peu plus en écrivant ça, ça serait beaucoup plus propre de faire ceci :
    De sorte qu'eval évalue la chaine suivante :

Discussions similaires

  1. déclaration de variable public
    Par mathieu57 dans le forum MFC
    Réponses: 5
    Dernier message: 15/09/2005, 17h36
  2. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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