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
    7
    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
      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.
        0
        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
          0
          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 ;-))
            0
            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
              0
              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à
                0
                1. mille fois merci

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

                  grand grand GRAND merci

                  je signale le sujet résolu :D
                  0