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 :

[bash] Boucle qui ne boucle pas


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut [bash] Boucle qui ne boucle pas
    Bonjour à tous,

    Je me permet de faire appel à la communauté car j'ai besoin de faire un script qui me sortirait des éléments d'un fichier csv pour les passer ensuite en argument d'une autre commande.
    Le fichier de test est composé comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toto@truc.com;0000toto2@truc.com;1111
    titi@truc.com;2222;titi2@truc.com;3333
    Pour l'instant, je m'attelle à sortir les données que je veut et tester si ça marche. La réponse est ou et non...

    Voici le script :

    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
    #!/bin/bash
     
    let "ligne=1"
     
     
     
    while [ -z "$cond" ]
    do
    	cond=`cat exemple.csv | sed -n "$ligne p" |cut -d ';' -f1`
     
    	host1=`cat exemple.csv | sed -n "$ligne p" |cut -d ';' -f1`
    	pass1=`cat exemple.csv | sed -n "$ligne p" |cut -d ';' -f2`
    	host2=`cat exemple.csv | sed -n "$ligne p" |cut -d ';' -f3`
    	pass2=`cat exemple.csv | sed -n "$ligne p" |cut -d ';' -f1`
     
    	echo $host1-$pass1-$host2-$pass2
     
    	let "ligne=ligne+1"
    done
    Ma satisfaction, c'est que j'ai bien les éléments qu'il faut qui s'affichent à la place de mes variables. Mon soucis c'est que mon script s'arrête à la première ligne, comme s'il ignorait le "ligne+1"...

    Merci à toute âme charitable qui passera par là...

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour




    [edit] Ah. Au fait. Ta condition teste si la variable est vide.
    Donc après un tour de boucle, la variable "$cond" n'est plus vide.
    Et s'arrête.
    [/edit]

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2018
    Messages : 2
    Par défaut
    Aaaah oui, en effet c'est plus rapide!!

    Mais du coup, comment je change de ligne dans ce cas? C'était un peu ça qui me gênais au début.

    En gros, ce que je veut faire :

    Lire la première ligne et en tirer les variables qui vont bien, les passer à une autre commande (imapsync pour ne rien cacher), puis passer à la deuxième ligne, etc. etc. jusqu'a ce qui n'y ait plus de ligne à lire, d'où ma première idée...

    Merci en tous cas!

    [Edit] OK, il faut que j'apprenne à lire... [/Edit]

    [Edit2] BOn, du coup j'ai pas réussi à manipuler le "while read" commeje voulais alors j'ai contourné :

    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
    #!/bin/bash
    read -p 'Selectionner le fichier source : ' fic
     
    cond=`wc -l "$fic" | cut -d ' ' -f1` 
    let "ligne = 1"
     
    while [ "$ligne" -le "$cond" ]
    do
     
     
     
        host1=`cat "$fic" | sed -n "$ligne p" | cut -d ';' -f1`
        pass1=`cat "$fic" | sed -n "$ligne p" | cut -d ';' -f2`
        host2=`cat "$fic" | sed -n "$ligne p" | cut -d ';' -f3`
        pass2=`cat "$fic" | sed -n "$ligne p" | cut -d ';' -f4`
     
        echo $host1-$pass1-$host2-$pass2
        let "ligne +=1"
    done
    Là, ça fonctionne même si, je l'admet, c'est un peu de la tambouille... [/Edit2]

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

Discussions similaires

  1. boucle qui ne tourne pas
    Par sash6 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 04/06/2007, 16h49
  2. Réponses: 10
    Dernier message: 07/01/2007, 12h03
  3. [Tableaux] une boucle qui ne boucle pas
    Par taly dans le forum Langage
    Réponses: 9
    Dernier message: 19/09/2006, 17h25
  4. [MySQL] Boucle qui ne fonctionne pas bien que la 1ère fois
    Par R.L. dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/05/2006, 21h59
  5. Réponses: 1
    Dernier message: 28/07/2005, 14h21

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