Une dizaine de quoi ? de jours ? de minutes ?? d'années ???
davidubois a écrit :
J'ai un script à corriger car il ne fonctionne pas :-s
Ce script doit recherche un n° de tél dans un fichier csv ( à partir d'une liste de n° contenu dans un fichier input.
Le script est le suivant : #!/bin/bash
#set -x
clear
echo "--------------------------------"
echo "Verification des retours "
echo "--------------------------------"
dddd="ZZ"
echo "" > output
cat input | while read nd
do
dddd=`grep $nd /data/hvme/infiles/dracco/archive/*.dat | cut -c69-70 | grep "00"`
echo " retour : $nd " $dddd
if [ "$dddd" == "00" ]
then
echo $nd $dddd
echo "update mmc_lignes set l_conf_dracco='00' where l_ligne='"$nd"' and l_acti='1';" >> output dddd=""
else
dddd=""
fi done
|
A votre avis où sont les erreurs ?
|
Quel est ton problème ? Ta variable "dddd" (j'adore l'intelligence de tes noms de variables, c'est un vrai régal pour comprendre de quoi il s'agit) n'est pas remplie ???
Sans connaitre la structure de ton CSV (un exemple serait le bienvenue) on aura du mal à t'aider. Déjà je n'arrive même pas à comprendre pourquoi tu fais à l'issue de ton grep un "grep 00" ???
Sinon il y a quand-même des trucs à améliorer
1) echo "" > output peut s'écrire plus simplement "> output" ou même "rm -f output"
2) dddd="ZZ" totalement inutile. De même ton double dddd="" que tu as écrit dans le then et dans le else (alors qu'en le mettant après le "fi" tu ne l'aurais écrit qu'une fois) est inutile...
3)
dddd=`grep machintruc | truc |chose |grep "00"`
if [ dddd = "00" ]
=> Un peu de réflexion: Que peut contenir "dddd" ? Apparemment il contient "00" si le grep trouve. Mais s'il ne trouve pas, je présume qu'il ne contiendra rien
Donc pour résumer, soit "dddd" contient "00" soit il est vide => autant tester tout simplement qu'il n'est pas vide !!!
davidubois a écrit :
J'ai essayé dddd=`grep ${nd} /data/hvme/infiles/dracco/archive/*.dat | cut -c69-70 | grep "00"` |
mais l'ajout d'{} n'a rien changé...
|
Les accolades ne sont utiles que s'il risque d'y avoir confusion. Exemple, t'as une variable "prix=10" et tu veux afficher le prix suivi d'un "F" (comme Franc). Si tu fais echo "$prixF" => le shell cherchera à afficher la variable "prixF" qui n'existe pas => solution: les accolades autour de ta variable => echo "${prix}F"
Les accolades servent aussi pour modifier la façon dont sont gérées les variables
${dddd:-perdu} te donnera "perdu" si "dddd" est vide ou non défini.
En dehors de ces cas, mettre des accolades ne change rien.
Message édité par Sve@r le 23-03-2007 à 19:22:35
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.