Lecture de fichier avec while do

Résolu
yoopi -  
 yoopi -
Bonjour,

voici mon problème :

mon texte cumul.txt contient 4 lignes

ex : 2536
8456
7594
6452

mais lorsque j'effectue ma boucle (pour lire toutes les lignes de mon fichier), il m'affiche seulement une fois ok alors qu'il devrait l'afficher 4 fois

ma boucle ne me permet donc pas de lire entièrement mon fichier.

qui pourrait m'aider ?

ma boucle :

cpt=0
{
while read line

do grep "$line" > /dev/null
if [ "$line" = 0 ]
then
echo ""$line""
cpt=`expr $cpt + 1`
else
echo "ok"
fi

done < cumul.txt
}

d'avance merci
A voir également:

2 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Essaie comme ça :
cpt=0
{
while read line

do grep "$line" > /dev/null
if [ "$line" = 0 ]
then
echo ""$line""

else
echo "ok"
fi

cpt=`expr $cpt + 1`

done < cumul.txt
} 
;-))
0
yoopi
 
slt,

déplacer le compteur n'a rien changé,

maintenant mon fichier fait 3 lignes (il change tout le temps) mais j'ai seulement un affichage qui se produit !

voici le résultat lorsque j'exécute mon programme :

ok
THE FLUX IS OK

alors que ce devrait être :

ok
ok
ok
THE FLUX IS OK
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > yoopi
 
De toutes façons dans la situation actuelle, ton compteur il ne sert à rien ;-(

Et puis aussi, tu veux faire quoi exactement avec cette boucle ???

do grep "$line" > /dev/null
if [ "$line" = 0 ]

C'est sensé faire quoi ?

0
yoopi > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
re,

en fait cette boucle fait partie d'un long programme et le compteur est utilisé plus tard et il est très important !

ce que je veux faire c'est contrôler que les nombres sur chaque ligne de mon fichier soient différents de 0, si un nombre est égal à 0 alors il faut le signaler avec un echo qqch sinon ici je suis en mode test donc, je vérifie que ma boucle li bien toutes les lignes de mon fichier et pour ce faire je l'affiche avec un echo.

donc :

je crée une boucle pour lire un fichier,
je li chaque ligne (ce sont des numeric) de mon fichier,
si il y a un élément qui est = à 0,
alors je le signale et j'incrémente un compteur,
sinon j'affiche l'élément que je viens de lire (si il est différent de 0),

j'aimerai donc avoir un résultat avec autant de ligne qu'il n'y a dans mon fichier.

merci pour ta collaboration jipicy
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
[tmpfs]$ cat fich
2536
8456
7594
8503
6452
2036

[tmpfs]$ cat foo.sh
#! /bin/sh

#set -xv

cpt=0

while read line

do grep "0" <<<"$line" > /dev/null
if [ "$?" = 0 ]
then
echo ""$line""
cpt=`expr $cpt + 1`
else
echo "ok"
fi

done < fich
echo "compteur=$cpt"

[tmpfs]$ ./foo.sh
ok
ok
ok
8503
ok
2036
compteur=2

[tmpfs]$  
;-))
0
yoopi
 
merci beaucoup,

je n'ai pas encore testé mais ça m'a l'air d'être tout à fais ce que je cherchais ;-)

une fois encore, je te remercie pour tes précieux conseils
0