Shell脚本 + 数字求和

14

什么是KSH或BASH中最好的简单优雅的求和方法?我的例子用了let命令,但我想找到更好的方法来汇总所有数字。

例如:

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

let SUM=$num1+num2+num3.........
4个回答

33

如何尝试:

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

5

同意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

如果你将双括号移到最外面,就可以省略最后一个美元符号并自由地为操作数和运算符(包括变量和赋值运算符)添加空格,以提高可读性。

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

(( count++ ))

(( sum += quantity ))

如果你不使用 let 或外部的 (()) 形式(或者你正在递增变量或在右侧进行赋值),则不能使用增量样式运算符(*= /= %= += -= <<= >>= &= ^= |= ++ --)。


0

你可以使用$(())语法,但如果你有小数,使用awk或bc/dc进行数学计算,以实现“可移植性”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接