(shell) Opération de réels avec flottants

Eyken -  
dubcek Messages postés 19030 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai pour devoir de créer pour mes études un script shell calculant le moyenne des nombres rajoutés en paramètres.
Le script doit bien sur pouvoir calculer les chiffres à virgules.

Voila mon script :

#!/bin/bash    
count='0'    
somme='0'    
for var    
do    
echo "scale=2 ; $somme+$var"   #on vérifie l'opération effectuée à chaque addition    
let "somme=$somme+$var"    
let "count=$sount+1"    
done    
echo "scale=2 ; $somme/$count" | bc    

L'emploie de scale sur la fin permet d'afficher le résultat avec 2 chiffres après la virgule, mais cela ne marche que si les paramètres rentrés sont des entiers. Si l'on y met des nombres à virgule, leur addition les transforme automatiquement en entier, et je n'arrive pas à employer SCALE lors de l'addition des variables entre elles.

Quelqu'un aurait une solution à me proposer ?

Merci d'avance !!

A voir également:

2 réponses

dubcek Messages postés 19030 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
hello
scale est une option de bc, pas du shell. le shell ne peut pas faire d'opérations flottantes, il faut utiliser bc, awk, dc pour faire tout les calculs
0
Eyken
 
Merci de l'info !
Un moyen pour y parvenir ?
Je débute grandement dans tout ce domaine ^^
J'arrive à employer bc en echo mais pas à l'intégrer dans une variable pour pouvoir le réutiliser par la suite.
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 435
 
$ echo 'scale=2; 12.75 / 2' | bc
6.37

$ A=$(echo 'scale=2; 12.75 / 2' | bc)

$ echo $A
6.37

$
0
dubcek Messages postés 19030 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
je construit la formule avec les paramètres et je l'envoie dans bc
$ ./f2  2.2 3.3 5.5 
scale=2 ; (2.2+3.3+5.5+0 )/3
3.66
$ 
$ cat f2
#!/bin/bash
printf "scale=2 ; (" ; printf "%s+" $@ ; printf  "0 )/$#\n"
(printf "scale=2 ; (" ; printf "%s+" $@ ; printf  "0 )/$#\n") | bc
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 435
 
Salut,

Si l'on y met des nombres à virgule, leur addition les transforme automatiquement en entier, et je n'arrive pas à employer SCALE lors de l'addition des variables entre elles.
Normal, bc utilise le point comme décimal et non la virgule.
$ echo 'scale=2; 12.75 / 2' | bc
6.37
De plus, ta syntaxe "for var;do..." n'est pas bonne, il faut donner du grain à moudre à la boucle for :
for var in "${@}"
do 
...
done
0
dubcek Messages postés 19030 Date d'inscription   Statut Contributeur Dernière intervention   5 641
 
hello
for var ; do est synonyme de for var in $@ ; do
$ set a b c d ; for X ; do echo $X ; done
a
b
c
d
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 435
 
Salut,

Merci, je me coucherai bien moins c*n ce soir ;-\
0