Tester valeur de retoru

Tester valeur de retoru - Shell/Batch - Programmation

Marsh Posté le 05-01-2006 à 11:46:09    

Bonjour à tous,
Voici mon script shell
 

Code :
  1. #!/bin/bash/
  2. ...
  3. sqlplus [mes_arguments]
  4. echo $?
  5. ...


 
Mon problème est le suivant :
Que ma commande sqlplus se plante ou non mon echo $? retourne toujours 0 ...
Aparament la variable $? ne récupère pas la valeur de retour de sqlplus, comment puis-je faire pour récupérer la valeur de retour de l'exécution de ma commande sqlplus?
 
Merci d'avance

Reply

Marsh Posté le 05-01-2006 à 11:46:09   

Reply

Marsh Posté le 05-01-2006 à 13:31:52    

Ben je dirais que c'est la commande sqlplus qui est mal ecrite ou bien pas ecrite comme tu le voudrai, et donc qu'elle indique qu'elle c'est tj bien terminer.
 
Essayer ca deja pour savoir où est envoyé le message d'erreur (sortie standard ou erreur)
 
sqlplus [mes_arguments] > log.log 2> err.log


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Marsh Posté le 05-01-2006 à 13:42:11    

PierreC a écrit :

Ben je dirais que c'est la commande sqlplus qui est mal ecrite ou bien pas ecrite comme tu le voudrai, et donc qu'elle indique qu'elle c'est tj bien terminer.


 
Pas forcément.
J'ai le même comportement avec isql, et je le conçois de la manière suivante : ce n'est pas mon interpréteur sql qui plante, il a bien envoyé sa requête, a bien reçu une réponse du serveur de base de données, a pu la traiter correctement et terminer son boulot.
Donc même si le serveur retourne une erreur (c'est-à-dire une interprétation de ta requête), ton interpréteur sql retourne 0, ce qui est logique puisqu'il a pu mener sa tâche à bien.

Reply

Marsh Posté le 05-01-2006 à 14:06:36    

Citation :

ton interpréteur sql retourne 0, ce qui est logique puisqu'il a pu mener sa tâche à bien.


 
Ok car en fait j'avais essayer avec le code suivant :
 

Code :
  1. more fic
  2. echo $?


Ou fic est un fichier qui n'existe pas, et mon echo $? retournait 0 donc si on suit le même raisonnement, le more retour un message d'erreur mais retourne qd même 0 puisqu'il a pu mener sa tâche à bien?
Ou alors $? ne prend pas la valeur de résultat?

Reply

Marsh Posté le 05-01-2006 à 14:09:43    

Non, tu n'as pas suivi mon raisonnement.
Dans le cas du more, il n'a pas pu exécuter ce qu'on lui demandait de faire : le fichier n'existe pas.
 
Dans le cas de l'interpréteur sql, il a pu donner sa requête au serveur et recevoir une réponse. Donc il retourne 0.
En revanche, si tu lui donnes de mauvaises informations de connexion, il ne peut terminer son travail et ne retournera pas 0.
 

$ isql -S machin
CT-LIBRARY error:
        ct_connect(): directory service layer: internal directory control layer error: Requested server name not found.
$ echo $?
255
$


 
 
Bref, l'erreur que tu reçois est une erreur SQL provenant du serveur. Ce n'est pas une erreur de sqlplus.
Donc le code retour n'a aucune raison d'être différent de 0.


Message édité par Elmoricq le 05-01-2006 à 14:10:17
Reply

Marsh Posté le 05-01-2006 à 14:28:33    

Oki merci beaucoup, je vais essayer de trouver une solution aux problèmes

Reply

Marsh Posté le 05-01-2006 à 14:36:00    

La meilleure solution c'est, comme le propose pierreC, de rediriger le flux d'erreur vers un fichier.
Lis son post pour voir comment faire.
 
Après il te suffit de tester le fichier d'erreur. Par exemple s'il a une taille non nulle, tu sais que quelque chose à couillé. :)

Reply

Marsh Posté le 10-01-2006 à 05:43:38    

Si tu choisis de capturer stderr dans un fichier comme proposé, n'oublie pas de lancer la command avec LANG=C. Sinon la sortie varie en fonction de la locale utilisée au moment de l'appel, et il est impossible de faire un test qui marche dans tous les cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed