Lecture de fichier avec while do

Résolu/Fermé
yoopi - 6 févr. 2009 à 11:13
 yoopi - 6 févr. 2009 à 14:39
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
6 févr. 2009 à 11:17
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > yoopi
6 févr. 2009 à 11:41
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
6 févr. 2009 à 11:55
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
6 févr. 2009 à 13:21
[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
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