shell if 小數 比較

2021-09-20 19:44:08 字數 912 閱讀 5563

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"

else

echo "no"

fi這樣的比較,執行後得到錯誤:

line 4: [: 0.1: integer expression expected

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

max=0.1

min=0.01

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

then

echo "yes"

else

echo "no"

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

驗證方法:

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

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

php小數比較

浮點型數字不能進行比較,因為存在精確度的問題,所以可能比較出來的結果不符 解決問題用到的函式 strcmp 比較兩個字串 區分大小寫 strcmp string1,string2 語法 引數 描述 string1 必需。規定要比較的第乙個字串。string2 必需。規定要比較的第二個字串。返回值 0...

Linux Shell 小數比較

bin bash expr 方法是錯誤的,在比較相同位數時可以,當位數不同就會出錯,如100.00 70.00就會得出錯誤的結果 a 123 b 123 c 99.99 rat awk begin 100 echo rat if expr 70.00 eq 0 then echo 0 else ec...

Shell If 命令操作

a file 如果 file 存在則為真。b file 如果 file 存在且是乙個塊特殊檔案則為真。c file 如果 file 存在且是乙個字特殊檔案則為真。d file 如果 file 存在且是乙個目錄則為真。e file 如果 file 存在則為真。f file 如果 file 存在且是乙個...