Bash et resultat de requete SQL

Résolu/Fermé
wally - 22 nov. 2008 à 18:51
 wally - 22 nov. 2008 à 20:35
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.

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
22 nov. 2008 à 20:25
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
22 nov. 2008 à 20:04
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
22 nov. 2008 à 18:56
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
22 nov. 2008 à 19:49
[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
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
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
mille fois merci

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

grand grand GRAND merci

je signale le sujet résolu :D
0