[bash]Impossible de faire une simple addition

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

  1. 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..
    1. 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.
      1. 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