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 :

Modifier le résultat de sortie


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut Modifier le résultat de sortie
    Bonjour à tous !

    Voilà, alors je vais essayer de faire simple :

    dans un fichier script.sh je cherche à interroger un sgbd et stoker le résultat dans une variable, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbrSearchBase = $( java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql)"


    le problème c'est que, lorsque j'utilise cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql
    Et bien j'obtiens ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*) from MANAGEDRESULTS; 
    --> 0 
    ;
    j'ai cherché mais je n'ai pas trouvé l’option permettant de récupérer le résultat seul.
    Quelqu'un aurait une idée ?

    Je suis désolé de vous embêter, mais je bloque depuis hier sans pouvoir avancer dans mon travail...

    ps : je ne savait pas si cela faisait partie du forum SGBD ou linux. Je pris donc les modérateurs de m’excuser si j'ai choisi le mauvais endroit.

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

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

    :/ pourquoi passer par java pour interroger une base de données sql ?
    ne connaissant pas java, et vu qu'il n'y a rien d'autre, j'incriminerais plutôt celui-ci XD

    et, tu n'obtiendras pas le résultat escompté avec un code shell pareil, mais une belle erreur; lis donc un tuto sur le sujet dans ma signature, ou simplement le man bash à la section Substitution de commandes.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    tout d'abord merci de ta réponse.

    Coté commande shell : oui je me disait bien qu'un truc pareil ne fonctionnerait pas, mais c'était plus dans l'optique de démontrer par un exemple ce que je voulait faire. Je vais jeter un œil à ton tuto !

    Coté java : en faite c'est un collègue du bureau qui m'as dit d'utiliser cette commande. Il m'a expliqué que l'outil que l'on utilise travaille avec une base de donnée en mémoire (h2) et que l'on passe par hybernet pour récupérer les valeurs... C'est un peu flou pour moi, je ne suis qu'apprenti en 1ere année et donc assez faible techniquement parlant (surtout sur plateforme linux, mais bon je susi là pour apprendre ^^').

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    Suivant ton exemple, tu peux faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbrSearchBase = $( java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql |sed -n '2s/^....//p')"
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    C'est parfait !
    j'étais justement en train de regarder la commande sed !

    Pourrais tu m'expliqué ce tour de magie : '2s/^....//p' ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    Par défaut
    je persiste : il y a sûrement un moyen, en modifiant la commande ou le script java de rendre le résultat moins bavard.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    je persiste : il y a sûrement un moyen, en modifiant la commande ou le script java de rendre le résultat moins bavard.
    Oui je suis d'accord avec toi ! j'ai cherché des options supplémentaires mais je n'ai rien trouvé qui n'a fonctionné ^^'
    Mais bon pour l'instant je vais essayer d'avancer, et ej reviendrais là dessus quand mon programme sera fonctionnel !


    Pendant que j'y suis est-ce que je peux vous demander de l'aide sur autre chose (toujours en rapport avec mon script, et cette fois c'est bien en rapport avec linux ! ^^) :

    en faite j'essais de faire un script qui ne rend pas la main à l'utilisateur tant que ma condition n'est pas validé !
    ici : je veut insérer des trucs en base, et tant que TOUT n'est pas inséré, je ne poursuit pas le script, quelque chose dans ce genre là :

    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
     
    #ici je lance ma commande d'insertion qui va recevoir en parametre le dossier contenant les elléments à insérré (outil interne de ma société), et va les inséré en parallèle 
     
    echo "insertion commencé"
     
    #on compte le nombre d'éléments qui doivent etre inséré
    let "nbrCopie= 'find /ActiveFiles/transfer/CMS -name \* | wc -l' "
     
    #on compte le nombre d'éléments déjà présent en base
    let "nbrEnBase = java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql |sed -n '2s/^....//p'"
     
    #on calcule le nombre d'élément total attendu
    let "nbrAttendu = nbrEnBase + nbrCopie"
     
    #on boucle jusqu'a ce que tout soit inséré
    while [ $nbrEnBase -ne $nbrAttendu ]
    do
            #on actualise le nombre d'élément en base stocké dans la variable nbrEnBase 
    	let "$nbrEnBase = java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql |sed -n '2s/^....//p' "
    done
     
    echo "insertion terminé"

    Je ne voudrait pas trop abuser, et je sais que je peux trouver en cherchant un moment sur internet, mais si vous aviez des remarques ce serait vraiment cool ! dans le cas contraire merci quand même, vous m'avez déjà bien aidé !

    ps : le firewall bloque ton pdf d'introduction au bash ^^'

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    Par défaut
    let «[é]value des expressions arithmétiques.»
    des apostrophes ne constituent pas une substitution de commande.
    tu ne peux imbriquer des guillemets, car le shell les lit séquentiellement, et ne comprendra pas que certains en encadrent d'autres.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    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 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par joks93440 Voir le message
    Pourrais tu m'expliqué ce tour de magie : '2s/^....//p' ?
    Sur la 2ème ligne ("2"), remplacer ("s/") le début de ligne ("^") suivi de 4 caractères quelconques("....") par ("/") rien (""), fin de remplacement ("/") puis imprimer la ligne ainsi modifiée dans le flux de sortie ("p").


    Je remplacerais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let "nbrCopie= 'find /ActiveFiles/transfer/CMS -name \* | wc -l' "
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbrCopie=$(find /ActiveFiles/transfer/CMS -name \* | wc -l)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let "nbrEnBase = java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql |sed -n '2s/^....//p'"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbrEnBase=$(java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:/opt/bis/cms/db/cms_db;AUTO_SERVER=TRUE;TRACE_LEVEL_SYSTEM_OUT=0" -user sa -showResults -script test.sql |sed -n '2s/^....//p'")

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Et moi je remplacerais wc -l par sed -n '$='.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Points : 30
    Points
    30
    Par défaut
    Merci infiniment ! vous m'avez fait gagner un temps fou !
    ps : pourquoi remplacer wc par sed ?

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Ça dépend comment se présente ton fichier mais wc ne compte pas les lignes mais les retours à la ligne (\n).
    Il peut donc y avoir un problème si la dernière ligne de ton fichier n'est pas "finie".
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

Discussions similaires

  1. modifier le résultat de ls -l
    Par Empty_body dans le forum Administration système
    Réponses: 5
    Dernier message: 11/03/2008, 23h29
  2. [astuce] Comment passer des résultats en sortie par référence
    Par Hibou57 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2007, 20h12
  3. [COBOL ANS85] Résultat en sortie
    Par eagleleader dans le forum Cobol
    Réponses: 5
    Dernier message: 10/04/2007, 11h22
  4. [logging] Modifier les balises de sortie XML de Java ?
    Par MiJack dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 13/12/2005, 13h20

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