Script en shell avec requette sql

Résolu
Bonjour,

Je ne sais pas si c'est le bon forum mais je tente quand même.

Je voudrais créer un script qui m'affiche le résulat de ma requette sql. Ma question est simple :

omment en shell je peux récupérer les données que renvoi ma requette (sachant qu'elle renvoie 2 colonnes avec X lignes)?

Mes recherches m'ont permis de trouver comment l'executer mais pas de récupérer les valeurs.

Est-ce qu'il suffit de faire :

MaVar='sql -S serveur -D base -U utilisateur -P mot_de_passe -b Base <requetes.sql'


Merci d'avance
--
---------------------------------------------------------------------
La vie est-elle trop courte pour rester derrière son écran?
Configuration: Mac OS X
Firefox 3.0.11

26 réponses

Résumé de la discussion

On cherche à récupérer les résultats d'une requête SQL en shell, qui renvoie deux colonnes et plusieurs lignes, sans les afficher directement. Des échanges explorent des approches variées pour capturer et manipuler ce flux, y compris des substitutions et des redirections vers un fichier. La solution opérationnelle propose de construire la requête et de la passer au client MySQL via un pipe, puis de rediriger la sortie vers un fichier texte. En pratique, cela peut nécessiter d'adapter le chemin et les permissions, notamment sur Mac OS X avec MAMP, afin que la commande puisse écrire dans le fichier sans erreurs.

Bobot (l’IA à votre service)
  1. Contributeur
    enlève le <
    sed -i -e '/CLnom STnom ADippublic ADlogin/d' fichier
    2
    1. Contributeur
      hello
      avec quel shell ?
      essayer :
      MaVar=$(sql -S serveur -D base -U utilisateur -P mot_de_passe -b Base <requetes.sql)
      1
      1. Contributeur
        donc essayer MaVar=$(sql -S serveur -D base -U utilisateur -P mot_de_passe -b Base <requetes.sql)
        0
        1. Oki alors la réponse est qu'il ne connait pas la commande sql j'ai recherché sur le net je ne trouve pas comment faire.

          je precise que je suis sur mac, j'ai installé MAMP et que le reste du script se lance bien.
          0
          1. Contributeur
            ca veut dire que sql n'est pas dans le PATH, pour vérifier echo $PATH
            essayer /chemin/sql ...
            0
            1. Voila ce que "echo $PATH" me renvoie :

              /Library/Frameworks/Python.framework/Versions/Current/bin:/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin

              Je ne trouve pas lequel choisir il me retourne a chaque fois :

              No such file or directory.

              Vraiment dsl je suis vraiment debutant. En tout cas merci de m'aider
              0
              1. Contributeur
                il faut savoir où est installé l'exécutable sql
                y a-t-il une variable d'environnement ? set ¦ grep -i sql
                sinon le chercher
                find / -type f -name sql -ls
                0
                1. apparemment il n'y a pas de variable d'environnement et le find me le trouve pas.

                  auto115:~ nbonnet$ set | grep -i sql
                  auto115:~ nbonnet$ find / -type f -name sql -ls
                  find: /.fseventsd: Permission denied
                  find: /.Spotlight-V100/Store-V1: Permission denied
                  find: /dev/fd/3: Not a directory
                  find: /dev/fd/4: Not a directory
                  find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied
                  find: /Library/Application Support/Apple/Remote Desktop/Client: Permission denied
                  find: /Library/Application Support/Apple/Remote Desktop/Task Server: Permission denied
                  find: /Library/Application Support/Lobotomo Software/IPSecuritas: Permission denied
                  find: /Library/Application Support/VPN Tracker 4/cert: Permission denied
                  find: /Library/Caches/com.google.MacFUSEAutoinstaller.Keystone.0: Permission denied
                  find: /Library/Caches/com.google.UpdateEngine.Framework.0: Permission denied
                  find: /Library/Logs/Console/501: Permission denied
                  find: /Library/PreferencePanes/Sybase.prefPane: Permission denied
                  find: /net/localhost: Operation timed out
                  find: /net/broadcasthost: Operation timed out

                  et ceci n'en fini plus
                  puis
                  0
                  1. Contributeur
                    sql est bien installé ?
                    essaye
                    find /usr -type f -name sql -ls
                    0
                    1. J'ai installé MAMP et la commande ne me retourne aucun resultat.
                      0
                      1. Contributeur
                        est ce qu'il y a un dossier MAMP ?
                        0
                        1. Oui il est dans /Applications/MAMP/

                          Il faut que je lance la commande depuis ce répertoire?
                          0
                          1. j'ai regardé aux alentours il y a un script pour le démarrage du service MySql qui commence par

                            /Applications/MAMP/Library/bin/mysqld_safe

                            sauf que lorsque je met ceci dans mon script j'ai en retour

                            chown: /Applications/MAMP/db/mysql/auto115.intra.err: Operation not permitted

                            je vois pas quelle est l'erreur j'ai tenté de mettre le chown sur nbonnet:nbonnet car il était sur nbonnet:admin mais ca marche toujours pas
                            0
                            1. Contributeur
                              essaye
                              ls /Applications/MAMP/Library/bin
                              ou ne serait-ce pas mysql ?
                              ou find /Applications/MAMP -name mysql -ls
                              0
                              1. il ne me trouve pas non plus mais j'ai trouver en utilisant

                                /Applications/MAMP/Library/bin/mysqladmin --host=127.0.0.1 --user=nbonnet --port=8889

                                au lieu de

                                sql

                                dans le script cela ne me retourne plus d'erreur sauf qu'il faut que je trouve pas les bonnes options pour me connecter à la base de donnée.
                                0
                                1. enfin la solution

                                  printf "SELECT login, nombre FROM adsl"|/Applications/MAMP/Library/bin/mysql -D test_bagotage>test.text

                                  voila la ligne qu'il me faut pour pouvoir reupérer les données de ma table mais dans un fichier text. Il me reste plus qu'a travailler sur ce fichier pour pour utiliser les données
                                  0
                                  1. Contributeur
                                    il faut ajouter /Applications/MAMP/Library/bin dans ton PATH pour appeler simplement mysql:
                                    export PATH=$PATH:/Applications/MAMP/Library/bin
                                    ajouter cette ligne à la fin de .bashrc pour que se soit permanent
                                    0
                                    1. oki merci bien j'ai réussi a me connecter a ma base de donnée et à lancer ma requete. sauf que cette dernière me renvoie un fichier comme ceci :

                                      CLnom STnom ADippublic ADlogin
                                      Scipt equation 10.11.12.13 login
                                      CLnom STnom ADippublic ADlogin
                                      Scipt2 equation2 10.11.12.13 login

                                      J'aimerais bien suprimer les lignes :
                                      CLnom STnom ADippublic ADlogin

                                      je n'arrive pas a faire ma boucle avec un while. Tu peux m'aider pour ceci?
                                      0
                                      1. Contributeur
                                        soit depuis un fichier
                                        sed -e '/CLnom STnom ADippublic ADlogin/d' < fichier
                                        soit depuis un pipe line
                                        ta_commande ¦ sed -e '/CLnom STnom ADippublic ADlogin/d'
                                        0
                                        • 1
                                        • 2