天天看點

shell if 小數 比較

shell的 [ ] 對于數值的判斷都是基于整數的,如果碰到小數就無能為力了。

google了一把發現用awk的牛人多,不過發現一個兄弟的更加好。

if [ `expr $a \> $b` -eq 0 ];then

    echo $b is bigger

else

    echo $a is bigger

fi

通過expr來進行判斷,是以a 和 b 可以是小數。

#########################

上面這個是有bug的!!!!隻能比較第一位數字~~~~!坑爹!!!

正解如下:

在shell腳本中,無法對浮點數進行比較,如:

max=0.1

min=0.01

if [ "$max" -gt "$min" ]

then

echo "YES"

echo "NO"

這樣的比較,運作後得到錯誤:

line 4: [: 0.1: integer expression expected

因為bc和awk都支援浮點數,可以使用bc進行處理:

if [ `echo "$max > $min" | bc` -eq 1 ]

也可以寫成if [ $(echo "$max < $min"|bc) -eq 1 ]

驗證方法:

a=6.3;b=8.4;ret=`echo "$a > $b" | bc` ;echo $ret 

如果傳回的是1,則a大,如果不是1,則b大

本文轉自 Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/1916029