脚本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很有帮助。