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 le résultat d'une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut Récupérer le résultat d'une commande
    Bonjour,

    J'ai une base SQL utilisateurs contenant 3 champs NOM, PRENOM, NUMERO.
    Je voudrais faire un script pour récupérer périodiquement le résultat d'une commande me donnant :
    nom prénom numéro
    nom prénom numéro
    etc
    Pour ensuite compléter ma base de données.

    Pour l'instant, mes recherches m'ont permis de trouver comment executer une commande SQL à partir du script avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "REQUETE SQL" | mysql -h host -u user -ppassword database
    Je débute en shell et j'ai un peu de mal à voir comment faire pour lire le résultat et le stocker. Par exemple, le traiter ligne par ligne et stocker chaque terme dans un tableau.
    Je voudrais ensuite les insérer dans ma requête SQL si c'est possible.

    Si vous avez des pistes ou même d'autres solutions pour faire la même chose je suis preneur
    Merci d'avance.

  2. #2
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    C'est amusant parce que je suis en train de faire, à peu de choses près, le même travail. Donc je te passe un bout de mon code, celui pour faire la requête SQL et la stoker. Si tu ne comprends pas ou si tu vois mieux, les commentaires sont les bienvenus!
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    # extract AFS and NOVELL users from CRA database
    $SQLPLUS << EOF_SQL > $passwdFile
    SET PAGES 10000;
    SET LINES 133;
    SET HEAD OFF;
    SET COLSEP ':';
    SELECT
        a.SERVICE || ':' ||
        a.LOGIN_ID || ':' ||
        a.UNIX_UID || ':' ||
        a.UNIX_GID || ':' ||
        x.NICKNAME || ':' ||
        x.LAST_NAME || ':' ||
        NVL(a.SHELL,'tcsh')
    FROM
        CRA.ACCOUNT_DEF a,
        CRA.XWHO x
    WHERE
        a.CCID = x.CCID AND
        a.STATUS = 'ACTIVE' AND
        x.PHONE_NUM1 IS NOT NULL AND
        (
            a.SERVICE = 'AFS' OR
            a.SERVICE = 'NOVELL'
        ) AND
        (
            a.GROUP_CODE = 'PZ' OR
            a.GROUP_CODE = 'SI' OR
            a.GROUP_CODE = 'SA' OR
            a.GROUP_CODE = 'IZ' OR
            a.GROUP_CODE = 'KA' OR
            a.GROUP_CODE = 'LC' OR
            a.GROUP_CODE = 'HC' OR
            a.GROUP_CODE = 'Z6'
        );
    EXIT;
    EOF_SQL
    Je suppose que tu as bien initialisé les variables nécessaires pour appeler la base de données. $SQLPLUS est en fait l'appel pour lancer la requête SQL. Regarde bien les premières lignes de la requête: elles permettent de supprimer un maximum d'en-têtes et de retours à la ligne. Mais tout n'est pas encore supprimé et je dois encore enlever des lignes... À la fin de cette unique commande, le résultat est dans le fichier dont le nom est $passwdFile.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Merci pour ta réponse, ça va me servir pour la suite de mon projet
    La en fait ce que tu fais c'est que tu récupères le résultat de ta requete SQL que tu stockes dans un fichier.

    Mais j'ai mal exprimé mon problème et je viens de me rendre compte que ça peut porter à confusion. J'en suis désolé.
    C'est le résultat d'une commande shell que je veux récupérer, une commande asterisk qui me permet de savoir qui est inscrit sur ma machine et qui me donne le résultat sous la forme indiquée (a peu de chose près).
    Je voudrais traiter le résultat de façon à pouvoir l'insérer dans ma base de donnée.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    J'ai finalement réussi à faire ce que je voulais.
    J'ai stocké le résultat de la commande dans un fichier puis je le lis. Je laisse le code pour ceux que ça intéresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while read line
    do 
    var=$(echo $line | awk  '{print $1,$2,$3,$4}')
    set -- $var
    echo "INSERT INTO table (  NOM ,  PRENOM , NUMERO  , STATUS ) VALUES ( '" $1 "' , '" $2 "' , '" $3 "' , '" $4 "' );" | mysql -h host -u user -ppassword database
    done < resultat.txt

  5. #5
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Intéressant! J'essaie d'utiliser la même technique pour mieux paramétrer ma requête SQL: Je lis un fichier pour en extraire une partie de la clause WHERE. Jusque là tout va bien, mais le passage en argument se fait mal.

    Je voudrais affecter la chaîne A [espace] B [espace] C à l'argument $1. Malheureusement, $1 s'arrête au premier [espace] rencontré. Et ce, même si j'ajoute des guillemets.

    Un remède à ce mal?

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

Discussions similaires

  1. Récupérer le résultat d'une commande scp
    Par vbcasimir dans le forum Linux
    Réponses: 19
    Dernier message: 20/05/2009, 16h14
  2. Récupérer le résultat d'une commande UNIX
    Par luxtin dans le forum Fortran
    Réponses: 2
    Dernier message: 03/10/2007, 11h36
  3. Réponses: 3
    Dernier message: 19/06/2007, 11h27
  4. Récupérer le résultat d'une commande shell
    Par espadon1 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 10h01
  5. Réponses: 2
    Dernier message: 02/01/2006, 10h39

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