1
2
3
4
5
6
7
8
9
10
11
|
a=1.2
b=1.1
如果直接用
if
[
$a
-gt
$b
];then
echo
"$a > $b"
fi
或者
if
[
$a
>
$b
];then
echo
"$a > $b"
fi
|
都会提示语法错误
[: 1.2: integer expression expected
没办法直接对带有小数点的数进行对比
shell的 test 对于数值的判断都是基于整数的,没办法对带有小数的数值直接进行对比。
我们可以通过其它变通的方法来进行对比:
1、[[ ]]
1
|
[[
$a
>
$b
]] &&
echo
"$a > $b"
|
2、expr方法
比较妙的方法 expr $a \> $b
根据上面返回值来进行判断,等于0表示$a < $b,或者$a > $b
1
2
3
4
5
6
7
|
a=1.2
b=1.1
if
[ `expr
$a
\>
$b
` -eq 0 ];then
echo
"$a < $b"
else
echo
"$a > $b"
fi
|
注意:上面两种方法如果位数不一致,就没办法正常对比。
3、bc计算(推荐使用)
1
2
3
4
5
6
7
8
|
a=1.0
b=1.1
if
[ $(
echo
"$a > $b"
|bc) -eq 0 ];then
echo
"$a < $b"
else
echo
"$a > $b"
fi
|
大于返回1,小于返回0
位数不一样的有小数的数字,判断是否相等:
1
2
3
4
5
6
7
8
|
a=1.0
b=1.0000
if
[ $(
echo
"$a == $b"
|bc) -eq 0 ];then
echo
"$a != $b"
else
echo
"$a = $b"
fi
|
还是这种方法比较好,推荐使用
4、awk
1
|
awk -v num1=6.6 -v num2=5.5
'BEGIN{print(num1>num2)?"0":"1"}'
|
如果num1>num2打印输出0,否则输出1