Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/05/2008, 23h55   #1
Invité de passage
 
Inscription : mai 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 9
Points : 3
Points : 3
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 :
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.
nurdo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 09h23   #2
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
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 :
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.
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 15h07   #3
Invité de passage
 
Inscription : mai 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 9
Points : 3
Points : 3
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.
nurdo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2008, 19h57   #4
Invité de passage
 
Inscription : mai 2008
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 9
Points : 3
Points : 3
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 :
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
nurdo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 12h00   #5
Membre chevronné
 
Inscription : septembre 2007
Messages : 685
Détails du profil
Informations personnelles :
Âge : 48
Localisation : Suisse

Informations forums :
Inscription : septembre 2007
Messages : 685
Points : 723
Points : 723
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?
jmelyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h45.


 
 
 
 
Partenaires

Hébergement Web