[bash]Impossible de faire une simple addition

tontonbash -  
Zyclo Messages postés 227 Statut Membre -
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. chico200987 Messages postés 856 Statut Membre 144
     
    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
  2. tontonbash
     
    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
  3. Zyclo Messages postés 227 Statut Membre 17
     
    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