Bash mysql fonction afficher les données de la bd

Résolu/Fermé
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - Modifié par xunil2003 le 7/01/2013 à 00:58
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - 7 janv. 2013 à 09:40
Bonjour,

Je voudrai afficher les nons des fichier inscrit dans ma basse de donnée mysql avec une fonction.
Afin de pouvoir les exécuter un par un.
Mais je n'y arrive pas ?

#!/bin/bash

sql30(){    
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \    
  --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes3_1 FROM $nom_table3 WHERE cm='$code_maison'"      
  while read $select_noms_colonnes3_1     
        }    
echo $(sql30)    


Il m'affiche :
serveur@debian:~$ /home/serveur/Domotique/ordres/mochad/lumieres-all-a-off    
/home/serveur/Domotique/ordres/mochad/lumieres-all-a-off: line 163: Erreur de syntaxe près du symbole inattendu « } »    
/home/serveur/Domotique/ordres/mochad/lumieres-all-a-off: line 163: '        }'    
serveur@debian:~$ 

la ligne 163 est : }

Et avec ceci ça marche :
mysql -h $hote_db -D $nom_bd -u "$login_db" -p"$pass_bd" -B -N -e "SELECT $select_noms_colonnes3_1 FROM $nom_table3 WHERE cm='$code_maison'"    
while read $select_noms_colonnes3_1    


il m'affiche
lumiere-plafond-chambre-parent-off.wav    
Lumiere-lit-nathalie-chambre-parent-off.wav    
Lumiere-lit-laurent-chambre-parent-off.wav    
ensemble-TV-chambre-parent-off.wav    
lumiere-chambre-loic-off.wav    
lumiere-bureau-chambre-loic-off.wav    
ensemble-TV-chambre-loic-off.wav    






Lumiere-couloir-1er-etage-off.wav


Pourquoi je n'arrive pas afficher les noms des fichiers inscrit dans la bd avec une fonction ?
Merci

4 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
Modifié par mamiemando le 7/01/2013 à 01:04
Merci de soigner l'orthographe.

Je n'ai pas compris l'intérêt de la bouche while.

Accessoirement je ne pense pas que le shell soit un langage très adapté pour manipuler une base de donnée, à mon avis ce serait plus simple avec... je sais pas presque n'importe quoi d'autre que du shell :-) du python, du php, du java, du c++, n'importe quoi qui offre un binding réel avec mysql. Enfin bon, pourquoi pas.

En l'état, difficile de débugger ton script, car on ne sait pas comment sont initialisées tes variables shell, le schéma de la base etc... À ta place, je commencerais par afficher la valeur de chaque variable shell pour vérifier qu'elles ont toutes la valeur que tu crois, car ton erreur vient sans doute d'une variable qui n'est pas initialisée.

Ah et sinon la syntaxe de la boucle while me paraît bizarre, elle est peut être juste, mais il ne faut pas un "\" à la fin de ta ligne mysql ?

Bonne chance
0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
Modifié par xunil2003 le 7/01/2013 à 09:13
Bonjour,

Je suis obligé dit réaliser en bash afin que le terminal exécute les fichiers ??

#!/bin/bash 
$prog="aplay" 
$chemin$="/home/serveur/Domotique/x10/son-confirmation/wav/" 

sql30(){ 
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \ 
  --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes3_1 FROM $nom_table3 WHERE cm='$code_maison'"  
  #while read $select_noms_colonnes3_1  
        } 
$prog $chemin$(sql30)


il m'affiche :
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-plafond-chambre-parent-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono 
Lumiere-lit-nathalie-chambre-parent-off.wav: Aucun fichier ou dossier de ce type 


Il s'arrête au deuxième fichier car le chemin est absent alors qu'il est présent au premier ?

et quand je mets un "echo" devant ma requête
echo $prog $chemin$(sql30)

j'ai ceci qui s'affiche
aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-plafond-chambre-parent-off.wav Lumiere-lit-nathalie-chambre-parent-off.wav Lumiere-lit-laurent-chambre-parent-off.wav ensemble-TV-chambre-parent-off.wav lumiere-chambre-loic-off.wav lumiere-bureau-chambre-loic-off.wav ensemble-TV-chambre-loic-off.wav Lumiere-couloir-1er-etage-off.wav


au lieu de faire
aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-plafond-chambre-parent-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/Lumiere-lit-nathalie-chambre-parent-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/Lumiere-lit-laurent-chambre-parent-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/chambre-parent-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/ensemble-TV-chambre-parent-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-chambre-loic-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-bureau-chambre-loic-off.wav
aplay /home/serveur/Domotique/x10/son-confirmation/wav/ensemble-TV-chambre-loic-off.wav
pour être exécuté par bash.


Comment puis je faire ?
Merci.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
7 janv. 2013 à 09:12
Salut,

Si tu nous expliquais ce que tu veux exactement faire, peut être pourrions-nous t'aider ;-\

C'est quoi ça "$prog $chemin$(sql30)" ? Du moins c'est censé faire quoi ?

Une fonction n'est pas une variable !
Cette syntaxe "$(sql30)" ne correspond à rien ;-(

Si le but c'est de lire chaque ligne que retourne ton interrogation de ta base de données, la syntaxe serait plutôt :

while read line
do
${prog} ${chemin}${line}
done < <(mysql blabla blabla)

0
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 14
7 janv. 2013 à 09:40
Bonjour,

Ok ça marche impec

while read line
do
$(sql4) $(sql5)${line}
done < <(mysql -h $hote_db -D $nom_bd -u "$login_db" -p"$pass_bd" -B -N -e "SELECT $select_noms_colonnes3_1 FROM $nom_table3 WHERE cm='$code_maison'"  | grep .wav)


résultat :
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-plafond-chambre-parent-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/Lumiere-lit-nathalie-chambre-parent-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/Lumiere-lit-laurent-chambre-parent-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/ensemble-TV-chambre-parent-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-chambre-loic-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/lumiere-bureau-chambre-loic-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/ensemble-TV-chambre-loic-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono
Playing WAVE '/home/serveur/Domotique/x10/son-confirmation/wav/Lumiere-couloir-1er-etage-off.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono


Merci.
0