[Script Shell] Utilisation du FOR
Résolu/Fermé
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
-
8 mai 2007 à 11:33
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 - 10 mai 2007 à 17:27
Trezeg Messages postés 73 Date d'inscription mercredi 20 décembre 2006 Statut Membre Dernière intervention 24 novembre 2010 - 10 mai 2007 à 17:27
A voir également:
- [Script Shell] Utilisation du FOR
- Notice d'utilisation - Guide
- Script vidéo youtube - Guide
- Utilisation chromecast - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Downloader for pc - Télécharger - Téléchargement & Transfert
11 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 12:31
8 mai 2007 à 12:31
Salut,
Essaye de changer cette ligne :
Essaye de changer cette ligne :
for bcp in `grep bcp /Mesbatches/$1 | sed -n '$='`par :
for bcp in $(seq $(grep bcp /Mesbatches/$1 | sed -n '$='));-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 14:22
8 mai 2007 à 14:22
La solution du dessus marche pour le nombre d'itération des boucles, mais ne doit pas effectuer le traitement voulu.
Modifie ton script comme ceci :
Modifie ton script comme ceci :
#!/bin/ksh #!/bin/sh #!/bin/bash batchFile=/Mesbatches/$1 echo $batchFile echo $1 OIF=$IFS # sauvegarde du séparateur de champs IFS=$'\n' # initialisation du séparateur de champs (saut de ligne) for bcp in $(grep bcp /Mesbatches/$1) do echo $bcp grep "out" <<<"$bcp" >/dev/null if [ "$?" = 0 ] then continue fi echo "on est dans le if" inputFile=`grep bcp /Mesbatches/$1 | awk '{print $4}'` # Ce 4eme champ est un nom de fichier texte echo "on est dans l'affichage du fichier input" echo $inputFile inputCount=`sed -n '$=' $inputFile` echo "on affiche le nb de lignes du fichier input" echo $inputCount outputFile=/Mesbatches/$1.tmp echo "on affiche le nom du fichier output" echo $outputFile outputCount=`grep 'rows copied' $outputFile | nawk '{print $1}'` echo $outputCount if [ "$inputCount" != "$outputCount" ] then echo "ERROR on batch $1 !!!" echo $inputCount rows in file $inputFile echo $outputCount rows processed in database return 1 fi done IFS=$OIFS # restauration du séparateur de champs par défaut;-))
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
8 mai 2007 à 14:48
8 mai 2007 à 14:48
Salut jipicy,
voici le résultat de l'execution :
voici le résultat de l'execution :
$ check.sh b_utor /Mesbatches/b_utor b_utor check.sh[16]: syntax error at line 21 : `<<' unmatched:-//
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 15:13
8 mai 2007 à 15:13
A quoi correspond la ligne 21 ?
Note : Peut être faudrait-il mettre la dernière ligne de mon exemple "IFS=$OIFS" à la sortie du 1er "if ... fi" afin de ne pas perturber le déroulement du reste du script.
Note : Peut être faudrait-il mettre la dernière ligne de mon exemple "IFS=$OIFS" à la sortie du 1er "if ... fi" afin de ne pas perturber le déroulement du reste du script.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
8 mai 2007 à 15:21
8 mai 2007 à 15:21
La ligne 21 correspond à ceci :
grep "out" <<"$bcp" >/dev/nullAmclt,
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 15:23
8 mai 2007 à 15:23
Il manque un chevron ;-))
grep "out" <<<"$bcp" >/dev/nullC'et 3 qu'il en faut !
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
8 mai 2007 à 15:27
8 mai 2007 à 15:27
Je l'avais enlevé car j'ai cru à une faute de frappe ;-)
Cela dit, j'avais essayé sans succès :
Cela dit, j'avais essayé sans succès :
$ check.sh b_utor /Mesbatches/b_utor b_utor check.sh[16]: syntax error at line 21 : `<' unexpected $
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 15:33
8 mai 2007 à 15:33
Bon vu ton système il doit pas aimer les dernières inventions de bash ;-))
Essaie de parser ta variable comme suit alors :
Essaie de parser ta variable comme suit alors :
echo "$bcp" | grep "out" >/dev/null;-))
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
8 mai 2007 à 16:16
8 mai 2007 à 16:16
Re-
Visiblement il a du mal avec les chemins contenus dans les lignes sélectionnées:
Visiblement il a du mal avec les chemins contenus dans les lignes sélectionnées:
$ check.sh b_utor /Mesbatches/b_utor b_utor grep: can't open /i grep: can't open fotest/prg/uat/scripts/dbElmts/batchM grep: can't open gt/batches/b_utor $
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
8 mai 2007 à 16:26
8 mai 2007 à 16:26
Exécute ton script en mode débogage (set -xv) ou lance-le avec l'option (sh -xv ton_script), pour voir ce qui est mal interprété.
Vu ton système (Solaris) reviens à l'ancienne interprétation avec des quotes inversées ( `...` ) au lieu de "$(...)", on sait jamais ;-))
Vu ton système (Solaris) reviens à l'ancienne interprétation avec des quotes inversées ( `...` ) au lieu de "$(...)", on sait jamais ;-))
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
9 mai 2007 à 11:40
9 mai 2007 à 11:40
Salut jipicy,
J'aimerais revoir mon cheminement afin de trouver une solution. En fait je voudrais stocker toutes lignes contenant les mots "bcp" et " in " (avec un espace avant et après pour in) dans un fichier temporaire:
Aurais-tu une idée ?
Merci pour ton aide.
Trez
J'aimerais revoir mon cheminement afin de trouver une solution. En fait je voudrais stocker toutes lignes contenant les mots "bcp" et " in " (avec un espace avant et après pour in) dans un fichier temporaire:
grep bcp /Mesbatches/$1 | grep " in " > bcp.tmpEnsuite (et c'est là que je rame...) je veux effectuer mon traitement pour chacune des lignes de bcp.tmp (que je n'aurais plus à trier puisque déjà fait) tout en récupérant le 4ème champ pour chacune de ces lignes.
Aurais-tu une idée ?
Merci pour ton aide.
Trez
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
9 mai 2007 à 11:48
9 mai 2007 à 11:48
Trezeg
Messages postés
73
Date d'inscription
mercredi 20 décembre 2006
Statut
Membre
Dernière intervention
24 novembre 2010
2
10 mai 2007 à 17:27
10 mai 2007 à 17:27
Merci jipicy,
je suis parvenu à une solution concernant cette histoire de for en procédant de la façon suivante :
Trez
je suis parvenu à une solution concernant cette histoire de for en procédant de la façon suivante :
$ more check.sh #!/bin/ksh #!/bin/sh #!/bin/bash grep bcp Mesbatches/$1 | grep " in " > bcp.tmp while read line do echo "$line\n" inputFile=`echo $line | awk '{print $4}'` echo $inputFile inputCount=`wc -l $inputFile | awk '{print $1}'` echo $inputCount outputFile=/infotest/prg/files/tmp/uat/$1.tmp echo $outputFile outputCount=`grep 'rows copied' $outputFile | nawk '{print $1}'` echo $outputCount if [ "$inputCount" != "$outputCount" ];then echo "ERROR on batch $1 !!!" echo $inputCount rows in file $inputFile echo $outputCount rows processed in database exit 1 fi done < bcp.tmpA+
Trez
8 mai 2007 à 14:50
il n'a pas l'air d'aimer le seq: Amclt,