2010-09-03 82 views
7

什么KSH或bash总结数字的最佳简单优雅的方式 我的例子是关于我们的命令,但我想找到更好的方式来总结所有号码shell脚本+数字总和

例如

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

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

回答

17

如何:

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

可以使用$(())语法,但如果你有小数,用awk,或BC/DC做你的数学, “便携”。

3

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

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

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

所以我改为bc。您可以选择至极的方式你喜欢:

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

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

还有其他库尔斯方式来做到这一点......但如果你发送更多的细节,比如,如果你是这将是很好执行部门也,你需要添加bc -l参数,加载数学库。

1

如果将双括号移动到外部,您可以消除最后一个美元符号并自由分隔操作数和运算符(包括变量和赋值运算符)以提高可读性。

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

((count++)) 

((sum += quantity)) 

,除非你使用let或外(())形式(或你递增变量或右手边做任务)不能使用增量风格的操作(*= /= %= += -= <<= >>= &= ^= |= ++ --)。