сценарий оболочки + сумма чисел - PullRequest
8 голосов
/ 03 сентября 2010

Какой лучший простой и элегантный способ суммирования чисел в ksh или bash мой пример касается команды let, но я хочу найти лучший способ суммировать все числа

, например

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

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

Ответы [ 4 ]

22 голосов
/ 03 сентября 2010

Как насчет:

num1=1232
num2=24 
num3=444
sum=$((num1+num2+num3))
echo $sum # prints 1700
3 голосов
/ 03 сентября 2010

Согласен с ghostdog74.Однажды я использовал встроенную функцию $ (()), но я перешел на bc, потому что формат, в который мы получаем данные, не очень «числовой».Проверьте ниже:

jyzuz@dev:/tmp> echo $(( 017 + 2 ))
17
jyzuz@dev:/tmp> echo $(( 17 + 2 ))
19
jyzuz@dev:/tmp>

Кажется, что в 1-м случае он понимается как двоичные или шестнадцатеричные числа ... не очень уверен.

Так что я перешел на bc.Вы можете выбрать способ, который вы предпочитаете:

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

или

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

Существуют другие способы сделать это ... но было бы хорошо, если вы отправите более подробную информацию, напримересли вы также выполняете деление, вам нужно добавить аргумент bc -l, чтобы загрузить математическую библиотеку.

1 голос
/ 03 сентября 2010

Вы можете исключить последний знак доллара и свободно пробелить операнды и операторы (включая переменную и оператор присваивания) для удобства чтения, если переместить двойные скобки полностью наружу.

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

(( count++ ))

(( sum += quantity ))

Вы не можете использовать операторы стиля приращения (*= /= %= += -= <<= >>= &= ^= |= ++ --), если не используете let или внешнюю форму (()) (или вы увеличиваете переменные или делаете назначения справа).

0 голосов
/ 03 сентября 2010

вы можете использовать синтаксис $(()), но если у вас есть десятичные числа, используйте awk или bc / dc для выполнения математических операций, «переносимо».

...