shell中比较两个数的大小,一般可以使用大小于号:">"、"<"、">="、"<=",和-ge、-gt、-le、-lt
比如:大于输出1,否则输出0
[root@localhost64 ~]# [ 3 -gt 2 ]&& echo 1 ||echo 0
1
[root@localhost64 ~]# [ 3 -gt 20 ] && echo 1 ||echo 0
0
[root@localhost64 ~]# [ 3 > 2 ]&& echo 1 ||echo 0
1
这种对于-gt的比较方式来说只能比较整数的大小,如果遇到浮点数,或者说是小数,就会报错:
[root@localhost64 ~]# [ 3.0 -gt 2.0 ]&& echo 1 ||echo 0
-bash: [: 3.0: integer expression expected
0
对于大于号这种方式,只能说"看起来没问题"
[root@localhost64 ~]# [ 3.0 > 2.0 ]&& echo 1 ||echo 0
1
问题就在于:它的浮点数比较是按位比的:
[root@localhost64 ~]# [ 3.0 > 20.0 ] && echo 1 ||echo 0
1
[root@localhost64 ~]# [ 3.0 > 3.12 ] && echo 1 ||echo 0
1
3.0的第一位是3, 20.0的第一位是2,3>2所以被判定为3.0>20.0,判断出错
所以进行浮点数大小的比较,需要用到bc这个命令:
bc 命令是任意精度计算器语言,通常在linux下当计算器用,类似基本的计算器, 使用这个计算器可以做基本的数学运算
这样就可以了:
[root@localhost64 ~]# [ `echo "3.0 > 20.0"|bc` -eq 1 ] && echo 1 ||echo 0
0
[root@localhost64 ~]# [ `echo "3.0 > 3.12"|bc` -eq 1 ] && echo 1 ||echo 0
0
echo “3.0 > 20.0”|bc 这条命令,如果条件成立,返回的结果就是1,否则就是0
使用bc命令也可以实现加减乘除,除法是整除:
[root@localhost64 ~]# echo "2.00 / 4.00"|bc
0
[root@localhost64 ~]# echo "2.00 + 4.00"|bc
6.00
[root@localhost64 ~]# echo "2.00 - 4.00"|bc
-2.00
[root@localhost64 ~]# echo "2.00 * 4.00"|bc
8.00
[root@localhost64 ~]# echo "2.00 / 4.00"|bc
0
[root@localhost64 ~]# echo "10.00 / 4.00"|bc
2