您的位置:首页 > 运维架构 > Shell

bash计算性能

2016-04-15 10:44 477 查看
脚本1:

#!/bin/bash
i=0
for ((k=1;k<=10000;k++));do
i=`expr $i + 1`
done
echo $i

脚本2:
#!/bin/bash
i=0
for ((k=1;k<=10000;k++));do
let 'i=i+1'
done
echo $i

问题:哪个快?
答案:脚本2比脚本1快得多得多

有人会说这个问题很无聊,其实不无聊,如果不认真总结积累经验,bash想写好其实也不容易。
bash的常用整数计算方法有三种(以+1为例):
let 'i=i+1' (推荐)

i=`expr $i + 1`
i=$((i+1))

浮点数计算方法有两种:
bc方案:
# echo "scale=2;3/21" | bc

awk方案(推荐):
awk 'BEGIN{printf"%.2f\n",'$num1'/'$num2'}'

OK,回到前面的问题,为啥let比expr快?
[root@info-test-01 niewei]# type let
let is a shell builtin
[root@info-test-01 niewei]# type expr
expr is /usr/bin/expr
这里可以看到区别,因为let是内部命令。

最后再看看下面2个计算,哪个快?
time (awk 'BEGIN{ total=0; for(i=0; i<=100000; i++){total+=i;} print total;}')
time(total=0; for i in $(seq 100000); do total=$(($total+i)); done;echo $total;)

这些东西很简单,但是总结清楚形成良好习惯后对写高效bash很有帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux bash