Bash et resultat de requete SQL

Résolu
Bonjour tout le monde,

je cherche à récupérer le resultat d'une requete qui me retourne plusieur ligne
voici mon script shell

requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
mysql -u root -p$rootMysqlPass -e "$requete" | while read RESULTAT
do
    champ1=$(echo "${RESULTAT}"|awk -F\| '{ print $1 }')
    champ2=$(echo "${RESULTAT}"|awk -F\| '{ print $2 }')
    echo "champ1($champ1) - champ2($champ2)"
done


j'aurai voulu que le résultat soit

champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)
champ1(valeur_champ1) - champ2(valeur_champ2)

et au lieu j'ai le resultat

champ1(champ1 champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2()
champ1(valeur_champ1 valeur_champ2) - champ2() 


quelqu'un pourrait-il m'aider svp ?
d'avance merci.
Configuration: Windows XP
Firefox 3.0.4

8 réponses

  1. Modérateur
    requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
    mysql -u root -p$rootMysqlPass -e "$requete" | sed '1d' | while read nom pnom age; do 
    echo "$nom - $pnom - $age"
    done
    1. Modérateur
      Salut,

      Affiche-nous un exemple de sortie générée par ta requête SQL, sans quoi on ne te sera d'aucun secours.
      1. bonjour merci de votre réponse,

        j'ai modifier en donnant un nom à champ1 etc...

        var_dream=`mysql -u root -p$rootMysqlPass -B --exec="connect ma_base;  SELECT nom,pnom,age FROM ma_table"`
        echo "$var_dream"
        


        et la sortie est
        nom      prenom   slots     
        dupond  jean       32
        dumont  benoit   22
        pondu    françois  43
        


        et j'aimerai pouvoir faire un traitement sur chaque ligne ( row ) de retour

        - boucle sur le resultat de la requête
          nom="valeur du champ nom"
          prenom="valeur du champ prenom"
          age="valeur du champ age"
          
          echo "$nom - $prenom - $age"
        - fin de la boucle
        


        Je sais pas si je m'exprime comme il faut
        encore merci de votre aide
        1. Modérateur
          [tmpfs]$ cat fich
          nom      prenom   slots
          dupond  jean       32
          dumont  benoit   22
          pondu    françois  43
          
          [tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
          nom - prenom - slots
          dupond - jean - 32
          dumont - benoit - 22
          pondu - françois - 43
          
          [tmpfs]$  
          Mais bon si c'est juste pour rajouter un tiret entre chaque champ, il y a d'autres voies plus simple pour y arriver ;-))
          1. merci encore de votre réponse,

            je n'ai pas compris ou je devais mettre
            [tmpfs]$ while read nom prenom age;do echo "$nom - $prenom - $age";done < fich
            nom - prenom - age
            dupond - jean - 32
            dumont - benoit - 22
            pondu - françois - 43
            
            [tmpfs]$  
            


            désolé je débute

            enfaite je doit utiliser les variable ainsi créer à chaque ligne pour passer des paramètre a une autre exécution

            exemple :
            - boucle sur le resultat
            nom="valeur nom"
            prenom="valeur pnom"
            age="valeur age"
            
            ici je lance une exécution avec comme argument mes variable
            commande1 nom age pnom 
            commande2 nom pnom age
            - fin de la boucle
            

            Le trait d'union était juste pour tester, je pourrait alors utiliser les variable pour exécuter une action dans sa boucle

            et à quoi correspond [tmpfs]$ ?

            encore une fois merci de votre aide
            1. Modérateur
              requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
              mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
              commande1 $nom $age $pnom 
              commande2 $nom $pnom $age
              done
              Bien sur, le séparateur de champ étant un espace ou une tabulation et non pas un "|" auquel cas il faudrait le préciser en début de boucle...
              1. merci beaucoup celà fonctionne parfaitement

                j'ai juste un souci c'est que il me retourne en premiere le nom des colonne
                requete="connect ma_base;  SELECT champ1,champ2 FROM ma_table"
                mysql -u root -p$rootMysqlPass -e "$requete" | while read nom pnom age; do 
                echo "$nom - $pnom - $age"
                done
                

                comme je l'ai dit ca marche à merveille grâce à vous et le resultat des echo est
                nom - prenom - age
                dupond - jean - 32
                dumont - benoit - 22
                pondu - françois - 43
                

                j'ai mit en gras la ligne concerné
                est-il possible d'empêcher le retour des nom de colonne dans le résultat ?

                je tiens encore à vous remercie, sans votre aide j'en serait pas là
                1. mille fois merci

                  vous avez résolu définitvement mon problème

                  grand grand GRAND merci

                  je signale le sujet résolu :D