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 :

Comment utiliser les variables ?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut Comment utiliser les variables ?
    Bonjour,

    Je viens tout droit du forum BBD, et j'ai un problème avec mon script en bash, et plus particulièrement les variables.

    Mon objectif est à partir d'un linux, de me connecter sur une base de donnée pour effectuer des requêtes.

    Pour cela, j'utilise l'outil FreeTDS pour me connecter à ma bbd via la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < test.sql
    Cette commande va se connecter et effectuer ce script en SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE GTB_MATMUT
    go
    declare @agence int
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go
    exit
    Sauf que voila, j'aimerai que le "id_agence" soit une variable que je puisse modifier depuis ma commande.

    Pour cela j'ai créer un script en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/bin/bash
    # Argument
    agence=$1
     
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < test.sql

    Je le lance via la commande via cette commande, mais je n'obtient aucun résultat... Pouvez-vous m'aider ?

    Ps : Dans la commande tsql, les variables sont définies via le "@" et non le "$".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bash -x test.sh 4505
    + agence=4505
    + TDSVER=7.0
    + tsql -H **** -p **** -U **** -P ****
    locale is "fr_FR.UTF-8"
    locale charset is "UTF-8"
    using default charset "UTF-8"
    1> 2> 1> 2> 3> valeur
    1>

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Quand tu envoies un fichier à une commande, il prend le fichier tel quel. Que tu définisses, avant ou après, des variables, lui fait une belle jambe.

    Il va donc falloir modifier le fichier texte à la volée.

    Je ne comprends pas l'intérêt de déclarer une variable @agence que tu ne définis jamais.
    Je fais donc l'hypothèse que ton @agence est juste une valeur fixe que tu as déterminée dans ton script bash par $agence.

    Ici, l'outil sed est suffisant. Avec une substitution de processus.

    Remplace dans ton script la ligne tsql par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < <(sed '/^declare @agence/d;s/@agence/'"$agence"'/g' test.sql)

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    Je ne peux pas tester la solution proposée maintenant, mais je vais essayer d'expliquer mieux la chose

    En définitive, afin d'avoir accès à ma bdd je dois, dans un premier temps me connecter à celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P ****
    Comme obtenir ma requête, j'ai connu un script sql...
    test.sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    USE GTB_MATMUT
    go
    select top 1 valeur from agence_capteur where id_agence = 4505 and id_capteur = 10001 order by date_heure desc
    go
    exit
    ... que je place directement dans ma commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < test.sql
    Maintenant, souhaite améliorer l'exploitation de ce script en en variable le "id_agence" pour effectuer des requêtes plus facilement.
    Pour placer des variables dans mon code SQL, je suis obligé de déclarer ma variable et de l'intégrer à ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    USE GTB_MATMUT
    go
    declare @agence int
    select top 1 valeur from agence_capteur where id_agence = @agence and id_capteur = 10001 order by date_heure desc
    go
    exit
    Malheureusement, avec la commande tsql il n'est pas possible de remplacer la variable directement dans la commande, comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < test.sql 4505
    C'est pour cela que je dois passer par un script bash afin de pouvoir remplacer le @agence par tous les numéros d'agence.

    J'espère que c'est plus clair pour vous.

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Je maintiens que la solution proposée ci-dessus fonctionne.

    Maintenant, que faudra-t-il faire de la sortie ?
    Il est peut-être préférable de prendre la liste des id d'agences (dans un fichier), les modifier en requête SQL et envoyer le tout à "tsql".

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Par défaut
    En faite, tout cela servira à créer un plugin pour nagios (supervision réseau) d'où l'importance de pouvoir mettre une variable dans le champ "id_agence"

    Comme cela, je n'aurais plus qu'à renseigner le numéro d'agence pour que le script soit fonctionnel et que je puisse récupérer les valeurs souhaitées.

    Par contre, je ne comprends pas comment je peux remplacer le @agence de mon script SQL par un numéro d'agence via le sed
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDSVER=7.0 tsql -H **** -p **** -U **** -P **** < <(sed '/^declare @agence/d;s/@agence/'"$agence"'/g' test.sql)
    Dois-je remplacer $agence par le numéro d'agence ?
    Désolé je suis un peu perdu :/

  6. #6
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Il n'y a plus rien à changer.

    Si ton script s'appelle ./mon_script.bash, il suffit de l'appeler comme ceci, et tout marche:


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/04/2010, 14h48
  2. Réponses: 15
    Dernier message: 28/06/2007, 19h28
  3. Réponses: 3
    Dernier message: 09/01/2007, 09h44
  4. [2.0] Comment utiliser les variables de session ?
    Par batosai dans le forum ASP.NET
    Réponses: 11
    Dernier message: 03/05/2006, 15h49
  5. [VB]Comment utiliser les variables Windows?
    Par Furius dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/10/2005, 21h20

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