[bash] recuperer le resultat d'une commande SQL dans une variable bash

recuperer le resultat d'une commande SQL dans une variable bash [bash] - Shell/Batch - Programmation

Marsh Posté le 09-11-2005 à 13:57:09    

Bien le bonjours!  
 
Je veut faire intéragir un script bash avec une base de donnée mysql elle même mise en relation avec un site web.  
 
J'ai trouvé une commande qui me permet en une seule ligne de me connecter au serveur, de me connecter a la bdd voulue puis d'executer des requetes SQL qui me ressortent un résultat sur mon prompt: la voici :
 

Code :
  1. mysql -h adr.ess.e.ip -u identifiantsql -ppasswordsql -B --exec="connect bddnomdebase;  SELECT dream_val FROM t_dream WHERE dream_ID = 1"


 
Cependant je n'arrive pas à mettre le resultat de cette commande dans une variable, comment doi-je proceder?

Reply

Marsh Posté le 09-11-2005 à 13:57:09   

Reply

Marsh Posté le 09-11-2005 à 14:14:38    

Avec Oracle (et sans doute aussi avec MySQL), il faut rajouter exit à la fin de la commande pour sortir de la base de données.
Avec ksh (et sans doute aussi avec bash), on peut associer l'éxécution d'une commande à une variable en utilisant des backquotes (apostrophes spéciales qu'on obtient avec altgr 7 au clavier azerty).
Donc je propose d'essayer :

Code :
  1. var_dream_val=`mysql -h adr.ess.e.ip -u identifiantsql -ppasswordsql -B --exec="connect bddnomdebase;  SELECT dream_val FROM t_dream WHERE dream_ID = 1; exit"`

:)


Message édité par olivthill le 09-11-2005 à 14:16:05
Reply

Marsh Posté le 09-11-2005 à 14:32:24    

GG !!! :)
 
Merci olivthill !
 
la commande que jai faites est donc:

Code :
  1. var_dream=`mysql -h adr.ess.e.ip -u identifiantsql -ppasswordsql -B --exec="connect bddnomdebase;  SELECT dream_val FROM t_dream WHERE dream_ID = 1"`


 
Le exit n'est pas nécéssaire et apporte une erreure puisqu'il est implicite dans cette commande :)
 
Par contre il me reste un petit soucis: la variable stocke le nom de la colone (ici dream_val) et la valeure qui correspond a ma requete
 (salutation donc ^^).
 

Code :
  1. echo $var_dream
  2. dream_val salutation


 
Moi je veut juste recuperer le "salutation" sinon ca va etre compliqué pour faire une condition avec une variable avec un espace au milieu lol :)
 
Une idée ?

Reply

Marsh Posté le 09-11-2005 à 14:41:46    

Pour prendre uniquement ce qui se trouve après l'espace, faire :

Code :
  1. var_dream2=`echo $var_dream |cut -d" " -f2`

(Cela marche avec ksh). Ici cut utilise l'espace comme délimiteur et prend le deuxième champ.  
 
Edit: pour infos la même chose peut-être obtenue avec awk avec :

Code :
  1. var_dream2=`echo $var_dream | awk '{print $2}'`


Message édité par olivthill le 09-11-2005 à 14:47:52
Reply

Marsh Posté le 09-11-2005 à 15:46:33    

Nickel ta solution Olivthill :) Un grand merci !!!!!!!

Reply

Marsh Posté le 09-11-2005 à 20:55:43    

Tu peux eviter le pipe et cut ou awk avec :

var_dream=${var_dream#* }

Reply

Marsh Posté le 10-11-2005 à 14:16:48    

gentildreamer a écrit :

GG !!! :)
 
Merci olivthill !
 
la commande que jai faites est donc:

Code :
  1. var_dream=`mysql -h adr.ess.e.ip -u identifiantsql -ppasswordsql -B --exec="connect bddnomdebase;  SELECT dream_val FROM t_dream WHERE dream_ID = 1"`


 
Par contre il me reste un petit soucis: la variable stocke le nom de la colone (ici dream_val) et la valeure qui correspond a ma requete


 
C'est normal. Le mécanisme de sous-exécution (ou de délégation) réalisé grace aux backquottes qui encadrent la commande (`cde`) remplacent l'expression mise entre backquottes par tout ce que la commande affiche.
Ce mécanisme est extrèmement puissant car il permet au shell de déléguer aux autres programmes tout ce qu'il ne sait pas faire par lui-même. Par exemple, comme le Bourne Shell ne sait pas calculer (c'est juste un exemple parce que des shells évolués comme le Bourne Again Shell savent calculer); ben il lui suffit de déléguer son calcul à "expr" et récupérer ce que "expr" affiche => a=5; a=`expr $a + 1` => "a" vaut "6"
 
Si ta commande affiche plein de trucs, et que tu fais "a=`ma_commande_select`", tu auras dans "a" tout ce que "ma_commande_select" a affiché.
Ensuite, grâce qux autres outils unix comme "tr", "cut", "awk", "sed", tu peux modifier, couper, traiter ta variable "a" pour lui enlever tout ce qui peux te géner... du style
a=`echo $a | tr ... | sed ... | cut ...` => si tu maîtrise bien "tr", "cut" et "sed", alors "a" contiendra au final que ce qui t'intéresse...
 
T'as un cours de shell très complet ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf


Message édité par Sve@r le 10-11-2005 à 14:17:43

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed