[bash]Impossible de faire une simple addition

Fermé
tontonbash - 7 févr. 2011 à 17:14
Zyclo Messages postés 214 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 28 août 2014 - 17 juin 2011 à 14:39
Bonjour,

Voilà le code sur lequel je suis depuis ce midi, rien à faire, il y a un problème avec la variable $line...
Je suis sous Linux, j'ai un fichier qui contiens des chiffres et retours à la ligne entre chaques chiffres.
total=0
for line in $(cat monfichier); do
	total=$(echo "$line + $total" | bc)
done

L'erreur est la suivante :
(standard_in) 1: illegal character: ^M
(standard_in) 2: syntax error

Celà viens de la variable $line, quand je l'affiche elle m'affiche bien mes chiffres pourtant.
Mon script marche si par exemple je fais $line2=254 et que j'utilise ma variable line2 au lieu de line.
Alors qu'est-ce qui ne va pas avec cette variable line ? y aurait-il des caracteres cachés ? Comment puis-je l'epurer ?

Merci de votre aide

3 réponses

chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
7 févr. 2011 à 17:43
Salut,

En executant test.sh

total=0
for line in $(cat monfichier); do
total=$(echo "$line + $total" | bc)
done

echo $total;


Avec pour fichier monfichier :
1
2
3
4
5


J'obtiens :

[root@VMFedora spongebob]# ./test.sh
15


Ton ton script a l'air de parfaitement fonctionner chez moi..
0
Hmmm etrange...
Je te remercie beaucoup d'avoir testé et serait-il possible que tu essais avec mon fichier texte ?
Je l'ai généré avec un

awk | { print $NF }

afin de recuperer des chiffres en fin de ligne d'une autre commande. Je suis à peu près sur que ca vient des carracteres de fin de ligne mais il doit y aoir moyen de "nettoyer" cette variable.
Il faut que je trouve comment, en esperant que je ne fasse pas fausse piste...

Je sais ! Je vais esseyer en prenant que les 2 premiers carracteres de chaques lignes pour voir.
0
Zyclo Messages postés 214 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 28 août 2014 17
17 juin 2011 à 14:39
Bonjour,
il semblerait que l erreur renvoyée par le systeme montre ds caracteres a la noix dans ton ficher (^M en fin de ligne)., generalement du a un transfert de fichier dos vers Unix
enleves les et ca marche tout bien.

sous linux dos2unix -n ficher1 fichier2
ou sous vi : :%s/<CTRL+SHIFT+M Touche Entree>//g
Ouala
0