shell整數與小數比較,小數之間比較的方法【轉】


在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 ]
 
每步的執行結果如下
[root@hnanet ~]# max=0.1
[root@hnanet ~]# min=0.01
[root@hnanet ~]# echo "$max > $min" | bc
1
[root@hnanet ~]# echo "$max < $min" | bc
0
[root@hnanet ~]# echo "$max < $min"
0.1 < 0.01

也可參考如下

下面是一個常規寫法的示例:

if [ 1.1 -gt 1 ];then
  echo "OK"
fi

直接會拋出如下異常:

line 3: [: 1.1: integer expression expected

正確的寫法如下:

if [ `echo "1.1 > 1" | bc` -eq 1 ];then
    echo "OK"
fi

 

小數比較

前言

用於數值比較的無非大於、小於、等於、大於等於、小於等於這幾個。

比較格式: [ 數值1 比較符 數值2 ] 注意左邊的括號與數值1之間有一個空格,同樣,數值2和右邊的括號之間也有空格。

數值比較運算符對應下面幾個:
-eq 判斷相等,相等返回true,否則返回false
-ne 判斷是否不相等,不相等返回true,否則返回false
-gt 判斷左邊是否大於右邊的值,大於則返回true,否則返回false
-lt 判斷左邊是否小於右邊的值,小於則返回true,否則返回false
-ge 判斷左邊是否大於或等於右邊的值,大於則返回true,否則返回false
-le 判斷左邊是否小於右邊的值,小於則返回true,否則返回false
小數的比較

1.shell中 可以用 bc 對小數進行運算
#echo 5.5+1.1 | bc
6.6

2.使用,awk判斷小數點后的位數

num=6.6666;echo $num | awk 'BEGIN{FS="."}{printlength($2)}'

    1

3.直接使用awk比較大小

awk -v num1=6.6 -v num2=5.5'BEGIN{print(num1>num2)?"0":"1"}'

    1

如果num1>num2打印輸出0,否則輸出1

4.使用expr,返回1表示a>
a>b, 0表示a&lt;

a<b

 a=6.6 b=5.5;expr $a > $b

    1

5.使用br

echo "6.6>5.5" |br

    1

linux shell 中小數進行比較

if [ `expr $a \> $b` -eq 0 ];then
   echo $b is bigger
else
    echo $a is bigger
fi

原文鏈接:https://blog.csdn.net/david__peng/article/details/82980288

 
轉自
shell 中浮點數和整數的比較-望月飛魚-51CTO博客 https://blog.51cto.com/gavinshaw/776180
shell比較浮點數和整數 - breezey - 博客園 https://www.cnblogs.com/breezey/p/6806385.html
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM