Bash mysql fonction afficher les données de la bd

Résolu/Fermé
Signaler
Messages postés
736
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
27 décembre 2021
-
Messages postés
736
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
27 décembre 2021
-
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

Messages postés
30541
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
21 janvier 2022
7 271
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
Messages postés
736
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
27 décembre 2021
14
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
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 587
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
Messages postés
736
Date d'inscription
mercredi 17 novembre 2004
Statut
Membre
Dernière intervention
27 décembre 2021
14
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