Bonjour,
J'ai un script shell que j'utilise pour charger une table Oracle, via SQL Loader.
Ce script fonctionne à moitié. Lorsqu j'exécute le script et que je luis indique en entrée un nom de fichier inexistant, il me renverra un CR=3.(c'est OK).
Lorsque j'exécute le script avec un fichier en entrée contenant aucune erreur de chargement, il me renvoie un CR=0.(c'est Ok).
Par contre, si je lui met en entrée un fichier existant mais truffé d'erreurs, il me renverra invariablement un CR=0et là c'est KO, car je m'attends dans ce cas précis à avoir un CR=2.
Pourtant il va regarder dans le fichier bad le nombre de rejêts.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 #!/bin/sh #==================================================================== #NOM DU SCRIPT : dvn_0cw1.sh #==================================================================== # -------------------------------------------------------------------- # OBJECT # lance le batch cw1 #--------------------------------------------------------------------- # PARAMETRE # Aucun # # EXIT : # 0 Execution reussie # 1 Erreur java (voir la log) # 2 Erreur de chargement SQL*Loader (voir la log SQL*Loader) # 3 Erreur d'execution du shell # -------------------------------------------------------------------- #==================================================================== . $UNXSCRIPT/dvn_set_proc.sh . $UNXSCRIPT/dvn_set_env.sh #Fonction usage - affiche l'aide de la commande usage () { echo " " echo "Syntaxe : ./dvn_0cw1.sh <nom fichier log> <chemin fichier entree>" echo " " echo "Version : 1.0" } #-------------------------------- #Verification des arguments #-------------------------------- #verification des arguments if [ $# -eq 1 -a \( $1'_' = '-h_' -o $1'_' = '--help_' \) ]; then usage sortir $RET_SUCCES elif [ $# -eq 2 ]; then FICHIER_LOG=$UNXLOG'/'$1 echo 'log :'$FICHIER_LOG else echo "Argument ou nombre d'arguments invalide pour le batch $CODE_BATCH" sortir $RET_ERR_SHELL fi #-------------------------------- #Chargement des variables #-------------------------------- CODE_BATCH='cw1' #-------------------------------- #Corps du script #-------------------------------- #Fichier de donnees d'entree FICHIER_DATA=$2 if [ ! -r $FICHIER_DATA ]; then echo "Fichier de donnees d'entree "$FICHIER_DATA" introuvable ou vous n'avez pas les droits de lecture" sortir $RET_ERR_SHELL fi DATE_DEBUT=`perl -e "print time;"` echo "------ Lancement batch $CODE_BATCH a `date +'%R'` -------" > $FICHIER_LOG echo " " >> $FICHIER_LOG echo "Import des donnees ..." >> $FICHIER_LOG #Lancement de SQL Loader import_fichier_plat $CODE_BATCH $FICHIER_DATA 0 >> $FICHIER_LOG #Verification des erreurs sql loader FICHIER_BAD=$LOADER_LOG_PATH'/dvn_lo0'$CODE_BATCH'.bad' if [ -f $FICHIER_BAD ]; then #Erreur sur certaines donnees NB_REJET=`cat $FICHIER_BAD | wc -l | tr -d ' '` elif [ $CODE_RETOUR_IMPORT -eq $RET_SUCCES ]; then #Pas d'erreur NB_REJET=0 else #Erreur fatale NB_REJET=-1 fi echo "Nombre d'enregistrements en erreur : "$NB_REJET >> $FICHIER_LOG echo "Import des donnees termine" >> $FICHIER_LOG echo " " >> $FICHIER_LOG #echo "Lancement du batch java ..." >> $FICHIER_LOG RETOUR_BATCH=$? DATE_FIN=`perl -e "print time;"` TEMPS_PASSE=`expr $DATE_FIN - $DATE_DEBUT` MINUTES=`expr $TEMPS_PASSE / 60` SECONDES=`expr $TEMPS_PASSE % 60` #echo "------ Batch java termine en $MINUTES m et $SECONDES s -------" >> $FICHIER_LOG sortir $RETOUR_BATCH
Je ne comprends pas ce qui se passe.
Merci pour votre aide.
Pascal.
Partager