Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3286 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1242176
gentildrea​mer
Posté le 09-11-2005 à 13:57:09  profilanswer
 

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?

mood
Publicité
Posté le 09-11-2005 à 13:57:09  profilanswer
 

n°1242198
olivthill
Posté le 09-11-2005 à 14:14:38  profilanswer
 

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
n°1242240
gentildrea​mer
Posté le 09-11-2005 à 14:32:24  profilanswer
 

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 ?

n°1242254
olivthill
Posté le 09-11-2005 à 14:41:46  profilanswer
 

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
n°1242341
gentildrea​mer
Posté le 09-11-2005 à 15:46:33  profilanswer
 

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

n°1242653
matafan
Posté le 09-11-2005 à 20:55:43  profilanswer
 

Tu peux eviter le pipe et cut ou awk avec :

var_dream=${var_dream#* }

n°1243179
Sve@r
Posté le 10-11-2005 à 14:16:48  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
Récuperer une varible Javascript en php dans un formulairevariable de session et impression
utiliser une vue (SQL)Stocker le contenu d'un input texte dans une variable.
est il possible de lancer une commande système dans un proc. stock. ?lancer une commande systeme à partir d'une proc. stoc.?
Accent avec SQL Serverchargement d'une variable en GET
Meilleures performances d'XP en commande(s) Dos... ou grâce à la BDR..Récupérer la taille d'un tableau associatif
Plus de sujets relatifs à : [bash] recuperer le resultat d'une commande SQL dans une variable bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR