Linux指令碼中帶有小數點的數值比較大小

黃三每丘八發表於2018-09-10
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


相關文章