shell脚本+数字总和

时间:2010-09-03 08:12:08

标签: bash ksh

什么是最简单优雅的方式来总结ksh或bash中的数字 我的例子是关于let命令,但我想找到更好的方法来汇总所有数字

例如

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

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

4 个答案:

答案 0 :(得分:20)

怎么样:

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

答案 1 :(得分:3)

同意ghostdog74。我曾经使用$(())内置函数,但我改为bc,因为我们接收数据的格式不是很“数字格式化”。检查以下内容:

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

似乎在第一种情况下它理解为二进制或十六进制数字..不太确定。

所以我换成了bc。你可以选择你喜欢的方式:

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

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

还有其他冷却方法可以做到这一点......但如果您发送更多详细信息会很好,例如,如果您正在执行除法,则需要添加bc -l参数来加载数学库。

答案 2 :(得分:1)

如果将双括号一直移到外面,您可以消除最后一个美元符号并自由地对操作数和运算符(包括变量和赋值运算符)进行空格分隔。

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

(( count++ ))

(( sum += quantity ))

您不能使用增量样式运算符(*= /= %= += -= <<= >>= &= ^= |= ++ --),除非您使用let或外部(())表单(或者您正在增加变量或在右侧进行分配)侧)。

答案 3 :(得分:0)

您可以使用$(())语法,但如果您有十进制数字,请使用awk或bc / dc进行数学运算,“便携式”。