Fichier bash avec mysql

Fermé
xunil2003 - Modifié par xunil2003 le 25/07/2012 à 17:04
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 26 juil. 2012 à 09:17
Bonjour,

J'ai un script bash comme ceci
#!/bin/bash         

execution1="cm15 A4 On"         
execution2="aplay /home/serveur/Domotique/x10/son-confirmation/wav/appel-urgence-on.wav"         
executable="a4-on"         
macro="Aucun"          

case "$PROGRAMME" in         
Asterisk) programme="Asterisk" ;;         
Crontab) programme="Crontab" ;;         
php) programme="PHP" ;;         
"") programme="Script bash" ;;         
esac         

utilisateur=$(whoami)         
date1=$(date +'%Y-%m')         
date2=$(date +'%d-%m-%Y - %H:%M:%S')         

#Execution et écriture dans fichier log         
$execution1         
echo "$date2 - $utilisateur - $execution1 - $executable - $macro - $programme" >> /home/serveur/Domotique/rapports/ordres/$date1-rapport-ordres.log         
$execution2         


Ma table Mysql est comme ceci
id  cmu      exec1    exec2   exec3     Macro       
4  A4  cm15 A4 On  /home/serveur/Domotique/x10/son-confirmation/wav/...  a4-on  Macro vers d7


Je voudrai inserer ma basse de données mysql dans le bash
remplacer la ligne 3 par execution1="par mysql"         
remplacer la ligne 4 par execution2="par mysql"         
remplacer la ligne 5 par executable="par mysql"         
remplacer la ligne 6 par macro="par mysql"


Dans le fichier test j'ai essayé
     
#!/bin/bash     
format_texte="utf8"  
select_noms_colonnes="exec1"  
nom_table="bash"  
colonne_recherche="cmu"  
recherche="A4"  

Mysql1="mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \  
   --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" "   

$Mysql1



Le terminal me rèpond

root@debian:/var/www/maison/N4/X10# sh /home/serveur/Domotique/ordres/ordre-a4-test.sh  
/home/serveur/Domotique/ordres/ordre-a4-test.sh: 8: exec1: not found  
root@debian:/var/www/maison/N4/X10#   



Comment dois je faire ?
Pouvez vous m'aiguiller ?
Es-ce possible ?
Merci.

A voir également:

4 réponses

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
25 juil. 2012 à 20:31
A priori tu as une erreur dans ta commande shell :

Mysql1="mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \  
   --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" "  


Déjà à ce stade je ne sais pas si tu as fait un retour à la ligne derrière le FROM mais si c'est le cas c'est le premier problème.

Le second problème c'est qu'il y a un guillemet de trop derrière LIKE '$recherche%'".

Par rapport à la structure de ton code j'écrirais plutôt un truc du genre :

mysql="mysql -h '$hote_db' -D '$nom_bd' -u '$login_db' -p'$pass_bd' --default-character-set='$format_texte' -B -N"
query="select cmu from bash like 'A4'"
eval $mysql -e "$query;"


Autre point, le profil de base (password, login, encodage) ne devraient pas être dans script mais dans la configuration du client mysql (~/.my.cnf) car ils changent potentiellement d'un utilisateur à l'autre. De plus comme ton script requiert des droits en lecture, si ce script était utilisable par plusieurs utilisateurs, il pourraient tous voir le mot de passe en clair. Si au contraire le mot de passe est stocké dans ~/.my.cnf, le problème ne se pose plus et tu peux définir des droits restreints sur ce fichier.

Tu peux par exemple mettre dans ~/.my.cnf :

[client]
port=3306
user="my_sql_user"
password="my_password"


... et ensuite :

chmod 600 ~/.my.cnf


Bonne chance
0
Bonjour,

c'est sur un serveur, il y a un seul utilisateur en ssh uniquement.

avec ceci
#!/bin/bash 
mysql="mysql -h '$hote_db' -D '$nom_bd' -u '$login_db' -p'$pass_bd' --default-character-set='$format_texte' -B -N" query="select cmu from bash like 'A4'" eval $mysql -e "$query;" 
$mysql


il me rèpond dans le terminal

root@debian:/var/www/maison/N4/X10# sh /home/serveur/Domotique/ordres/ordre-a4-test.sh 
eval: 1: -e: not found 
mysql: Character set ''utf8'' is not a compiled character set and is not specified in the '/usr/share/mysql/charsets/Index.xml' file 
/home/serveur/Domotique/ordres/ordre-a4-test.sh: 2: Syntax error: word unexpected (expecting ")") 
root@debian:/var/www/maison/N4/X10# 


merci.
0
bonsoir,

ceci non plus ne fonctionne pas.

mysql="mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p "$pass_bd" \
  --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'"


root@debian:/var/www/maison/N4/X10# sh /home/serveur/Domotique/ordres/ordre-a4-test.sh
/home/serveur/Domotique/ordres/ordre-a4-test.sh: 2: Syntax error: Unterminated quoted string
root@debian:/var/www/maison/N4/X10# 


Pour comme ceci ça marche
mysql -h "$hote_db" -D "$nom_bd" -u "$login_db" -p"$pass_bd" \
  --default-character-set=$format_texte -B -N -e "SELECT $select_noms_colonnes FROM $nom_table WHERE $colonne_recherche LIKE '$recherche%'" 


root@debian:/var/www/maison/N4/X10# sh /home/serveur/Domotique/ordres/ordre-a4-test.sh
cm15 A4 On
root@debian:/var/www/maison/N4/X10#


Merci.
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
26 juil. 2012 à 09:17
Pas compris le dernier message. Ça marche ou pas ?
0