IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupérer des données mysql dans un script bash


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut Récupérer des données mysql dans un script bash
    Bonjour,

    j'ai essayé de récupérer des informations information de ma table mysql via un script bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
     
    hote_db="localhost"
    nom_bd="domotique"
    login_db="xxxx"
    pass_bd="xxxxxx"
     
    format_texte="utf8"
    #select_noms_colonnes="id,cmu,exec1,exec2,exec3, macro"
    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 -B -N -e "SELECT exec1 FROM $nom_table""
     
     
    execution1="$Mysql1"
    execution2="$Mysql2"
    executable="$Mysql3"
    macro="$Mysql4"
     
    .................
    Le terminal me rèpond
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    root@debian:/var/www/maison/N4/X10# sh /home/serveur/Domotique/ordres/ordre-a4-test.sh
    /home/serveur/Domotique/ordres/ordre-a4-test.sh: 15: exec1: not found
    root@debian:/var/www/maison/N4/X10#
    Ma table Mysql est comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id  cmu      exec1    exec2   exec3     Macro       
    4  A4  cm15 A4 On  /home/serveur/Domotique/x10/son-confirmation/wav/...  a4-on  Macro vers d7

    Comment dois- je faire ?

    Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 474
    Points
    19 474
    Par défaut
    Bonjour,

    Comment dois- je faire ?
    ne pas stocker des commandes complexes dans des variables. Utilise plutôt une fonction.

    à côté, de ça n'appelle pas un script bash avec sh.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Points : 5 849
    Points
    5 849
    Par défaut
    Il faut, au minimum, quoter les guillemets et évaluer l'expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/bash
    
    hote_db="localhost"
    nom_bd="domotique"
    login_db="xxxx"
    pass_bd="xxxxxx"
    
    format_texte="utf8"
    #select_noms_colonnes="id,cmu,exec1,exec2,exec3, macro"
    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 -B -N -e \"SELECT exec1 FROM $nom_table\""
    
    
    execution1=$("$Mysql1")
    execution2="$Mysql2"
    executable="$Mysql3"
    macro="$Mysql4"
    
    .................
    mais, comme l'indique N_bah, il serait plus judicieux d'écrire une fonction qui exécute la requête (à tester):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #!/bin/bash
    
    hote_db="localhost"
    nom_bd="domotique"
    login_db="xxxx"
    pass_bd="xxxxxx"
    
    format_texte="utf8"
    #select_noms_colonnes="id,cmu,exec1,exec2,exec3, macro"
    select_noms_colonnes="exec1"
    nom_table="bash"
    colonne_recherche="cmu"
    recherche="A4"
    
    function ma_requete {
        typeset col=$1
        mysql -h"$hote_db" -D"$nom_bd" -u"$login_db" -p"$pass_bd" -B -N -e "SELECT $col FROM $nom_table"
    }
    
    
    execution1=$(ma_requete $select_noms_colonnes)
    execution2="$Mysql2"
    executable="$Mysql3"
    macro="$Mysql4"
    
    .................
    HTH
    )jack(

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 412
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    Avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/bin/bash
     
    hote_db="localhost"
    nom_bd="domotique"
    login_db="xxxx"
    pass_bd="xxxxxx"
     
    format_texte="utf8"
    #select_noms_colonnes="id, cmu, prog, exec1_on, exec2_on, exec3_on, macro_on, exec1_off, exec2_off, exec3_off, macro_off, exec1_dim, exec2_dim, exec3_dim, macro_dim, exec1_bri, exec2_bri,  exec3_bri, macro_bri"
    select_noms_colonnes="exec1_on"
    nom_table="bash"
    colonne_recherche="cmu"
    col="cmu"
    recherche="A4"
     
    ma_requete(){
        typeset col=$1
        mysql -h"$hote_db" -D"$nom_bd" -u"$login_db" -p"$pass_bd" -B -N -e "SELECT $col FROM $nom_table"
    }
     
     
    execution1=$(ma_requete $select_noms_colonnes)
    execution2="$Mysql2"
    executable="$Mysql3"
    macro="$Mysql4"
    Le terminal rèpond
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/ordre-a4-on-mysql-test.sh
    /home/serveur/Domotique/ordres/ordre-a4-on-mysql-test.sh: 22: typeset: not found
    serveur@debian:~$
    Etes vous sur ?

    Merci.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 474
    Points
    19 474
    Par défaut
    n'appelle pas un script bash avec sh
    rend le script exécutable, et lance-le avec son chemin absolu ou relatif.
    si le script est dans le répertoire courant, utilise l'alias ./ (../ : répertoire supérieur; ./ : répertoire courant (à ne pas confondre avec le . de source))

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par xunil2003 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    serveur@debian:~$ sh /home/serveur/Domotique/ordres/ordre-a4-on-mysql-test.sh
    /home/serveur/Domotique/ordres/ordre-a4-on-mysql-test.sh: 22: typeset: not found
    serveur@debian:~$
    Etes vous sur ?

    Merci.
    Salut
    typeset est une instruction bash (Bourne Again Shell). En appelant ton script via sh, alors ça le fait exécuter par le Bourne Shell standard (/bin/sh) lequel ne connait pas typeset d'où cette erreur.
    Donc dans l'absolu, tu dois faire exécuter ton script par bash (/bin/bash) et non par sh.

    Mais comme tu as indiqué en début de script #!/bin/bash, ça te permet d'appeler ton script directement sans indiquer quel interpréteur utiliser. Le système récupèrera cette ligne lors de l'appel et fera alors exécuter ton script par le programme /bin/bash.
    Comme l'a dit N_Bah, cela nécessite juste que ton script soit exécutable et que tu indiques, lors de l'appel, son répertoire d'accès (à moins que ce répertoire ne soit positionné dans ton PATH)

Discussions similaires

  1. [MySQL] Récupérer des données mysql et les placer dans un tableau.
    Par argon dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 29/05/2009, 09h00
  2. Réponses: 1
    Dernier message: 31/01/2007, 11h59
  3. Réponses: 3
    Dernier message: 04/01/2007, 17h42
  4. Récupérer des variables Perl dans un script PHP
    Par barabath dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2006, 01h27
  5. récupérer des données saisies dans un fichier
    Par natie_49 dans le forum C++
    Réponses: 6
    Dernier message: 24/11/2005, 11h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo