Fichier bash avec mysql
Bonjour,
J'ai un script bash comme ceci
Ma table Mysql est comme ceci
Je voudrai inserer ma basse de données mysql dans le bash
Dans le fichier test j'ai essayé
Le terminal me rèpond
Comment dois je faire ?
Pouvez vous m'aiguiller ?
Es-ce possible ?
Merci.
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:
- Fichier bash avec mysql
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
4 réponses
A priori tu as une erreur dans ta commande shell :
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 :
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 :
... et ensuite :
Bonne chance
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
Bonjour,
c'est sur un serveur, il y a un seul utilisateur en ssh uniquement.
avec ceci
il me rèpond dans le terminal
merci.
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.
bonsoir,
ceci non plus ne fonctionne pas.
Pour comme ceci ça marche
Merci.
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.