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

Langages de programmation Discussion :

vecteur et boucle dans un shell


Sujet :

Langages de programmation

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 32
    Points
    32
    Par défaut vecteur et boucle dans un shell
    Bonjour,

    J'ai UN vecteur z=[12 13 69 45 12];
    je veux affecter les elements de ce vecteur a une variable dans une boucle, sous matlab je peux faire: for i=1:5, a=z(i) end.
    Comment peut on faire ca avec le langage Shell? en utilisant awk ou n'importe autre commande?

    Merci

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    tout dépend comment est déclaré ton vecteur en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    z=(12 13 69 45 12)  # initialisation du tableau
    len=${#z[@]}  # nombre d'éléments dans le tableau
    for ((i=0; i<$len; i++)); do
       echo ${z[i]}
    done
    ou plus directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    z=(12 13 69 45 12)
    for val in ${z[@]}; do
       echo $val
    done
    on peut aussi envisager que z soit déclaré comme une chaine à l'origine, mais c'est moins propre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    z="12 13 69 45 12"
    for val in $z; do  # attention, pas de quotes autour de $z ici
      echo $val
    done

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2011
    Messages : 58
    Points : 32
    Points
    32
    Par défaut
    Merci.

    Pour être plus précis j'ai un fichier avec une colonne de valeurs. J'aimerai lire les variables à partir de ce fichier.
    Votre shell ne marche pas si j'ajoute #!/bin/csh -f au début du shell. C'est très important cette ligne pour que le reste du shell marche.

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par Fatehcz Voir le message
    Pour être plus précis j'ai un fichier avec une colonne de valeurs. J'aimerai lire les variables à partir de ce fichier.
    Votre shell ne marche pas si j'ajoute #!/bin/csh -f au début du shell. C'est très important cette ligne pour que le reste du shell marche.
    csh est un shell spécifique (celui par défaut c'est plutôt bash), c'est utile de le préciser en effet

    alors... je pars du principe que ton fichier ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    z=[12 13 69 45 12];
    z=[5 8 9];
    j'avais jamais essayé csh, c'est assez... rustique dira-t-on :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/bin/csh -f
    
    foreach line ("`sed 's/\[/\(/;s/\]/\)/;s/;//;s/^/set /' fichier`")
       eval $line
       echo "--- ligne : $line ---"
       set i=1
       while ($i<$#z + 1)
          set a = $z[$i]
          echo "z[$i]=$a"
          @ i+=1
       end
    end
    et la sortie (rajoutée, pour montrer que ça fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ ./pouet
    --- ligne : set z=(12 13 69 45 12) ---
    z[1]=12
    z[2]=13
    z[3]=69
    z[4]=45
    z[5]=12
    --- ligne : set z=(5 8 9) ---
    z[1]=5
    z[2]=8
    z[3]=9

Discussions similaires

  1. Stocker les resultats de ma boucle dans un vecteur
    Par Medoou dans le forum MATLAB
    Réponses: 3
    Dernier message: 15/07/2009, 16h41
  2. [Tableaux] Boucle dans une boucle
    Par spawns dans le forum Langage
    Réponses: 2
    Dernier message: 12/02/2006, 13h11
  3. Réponses: 3
    Dernier message: 26/09/2005, 10h41
  4. Creer une boucle dans une requête ???
    Par fdloisel dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/10/2004, 14h05
  5. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26

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