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. mille fois merci

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

      grand grand GRAND merci

      je signale le sujet résolu :D
      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. 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 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
              [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. 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
                  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.