Shell运算,计算值保留两位小数

SHELL下是没有小数处理的,能进行运算的只能是-2^30到2^30-1范围的整数,否则溢出。
具体可以用的运算方式有:

1
2
3
4
5
6
7
8
[root@root ~]$ i=$[9 / 2]; echo i=$i;  
i=4

[root@root ~]$ i=$((9 / 2)); echo i=$i;
i=4

[root@root ~]$ i=`expr 9 / 2` ; echo i=$i;
i=4

很多最小安装的系统不会有expr,可以使用内置命令:

1
2
[root@root ~]$ i=let i=9/2 ; echo i=$i;  
i=4

如果需要保留小数,比如两位小数,可以使用awk实现,awk真是强大:

1
2
3
4
[root@root ~]$ i=`awk  BEGIN'{printf  "%.2fn", 9/2 }'` ; echo i=$i;
i=4.50
[root@root ~]$ i=`awk BEGIN'{ x=9 ; y=4 ; printf "%.2fn", x/y }'` ; echo i=$i;
i=4.50

运算符类型

按位运算符
~, < <, >>, &, |, ^
$[]表示形式告诉 shell 对方括号中的表达式求值

表达式替换
$[ ] 和 $(())
两种格式功能一样,所有的 shell 的求值都是用整数完成
$[ ] 可以接受不同基数的数字

赋值运算符
=、+=、-=、*=、/=、%=、&=、^=、|=、< <=、>>=