2010-09-03 13 views
7

quelle est la meilleure façon élégante simple à résumer nombre dans ksh ou bash mon exemple est laissé sur le commandement, mais je veux trouver une meilleure façon de résumé tous les numérosscript shell + numéros somme

par exemple

num1=1232 
num2=24 
num3=444 
. 
. 
. 

let SUM=$num1+num2+num3......... 

Répondre

17

Que diriez-vous:

num1=1232 
num2=24 
num3=444 
sum=$((num1+num2+num3)) 
echo $sum # prints 1700 
0

vous pouvez utiliser la syntaxe $(()), mais si vous avez des nombres décimaux, utilisez awk ou bc/dc pour faire vos comptes, "portably".

3

D'accord avec ghostdog74. J'ai déjà utilisé la fonction intégrée $ (()), mais j'ai changé pour bc parce que le format que nous recevons n'est pas très "formaté". Vérifiez ci-dessous:

[email protected]:/tmp> echo $((017 + 2)) 
17 
[email protected]:/tmp> echo $((17 + 2)) 
19 
[email protected]:/tmp> 

Semble que dans le 1er cas il comprend comme nombres binaires ou hexadécimaux .. pas très sûr.

J'ai donc changé pour bc. Vous pouvez choisir Wich façon que vous préférez:

bc << EOF 
$num1 + $num2 + $num3 
EOF 

ou

bc <<< "$num1 + $num2 + $num3" 

Il y a d'autres façons de le faire Cools cette ... mais ce serait bien si vous envoyez plus de détails, comme si vous êtes effectuer la division aussi, vous devrez ajouter bc -l argument, pour charger la bibliothèque math.

1

Vous pouvez éliminer le dernier signe dollar et espacer librement les opérandes et les opérateurs (y compris la variable et l'opérateur d'affectation) pour plus de lisibilité si vous déplacez les doubles parenthèses complètement vers l'extérieur.

num1=1232 
num2=24 
num3=444 
((sum = num1 + num2 + num3)) 

((count++)) 

((sum += quantity)) 

Vous ne pouvez pas utiliser les opérateurs de style incrément (*= /= %= += -= <<= >>= &= ^= |= ++ --) à moins que vous utilisez let ou la forme (()) à l'extérieur (ou que vous les variables incrémenter ou de faire des travaux sur le côté droit).