【shell】shell的數值比較和字符串比較

     在shell中,我們常常會對用到判斷的語句來判定某個條件的真假。比如while,if等控制語句。

     你如果運行下面這個腳本語句。

腳本1:

#!/bin/sh
 
x=0.1
 
while [ `echo "$x < 10" | bc` ]
do
        echo $x
        x=`echo "$x + 1" | bc`
        echo "$x < 10" | bc
done

 

你會發現,這個腳本怎麼回事啊??不停地在輸出,成了個死循環了。

 

但是如果這樣改進了一下的話

腳本2:

#!/bin/sh
 
x=0.1
y=`echo "$x < 10" | bc`
echo $y
 
while [ $y -eq 1 ]
do
        echo "true!!"
        echo $x
        x=`echo "$x + 1" | bc`
        y=`echo "$x < 10" | bc`
        echo $y
done

發現,程序可以了。

(說明一下,腳本希望做到輸出從0.1開始,每次遞增1,直到10.1結束)。

 

仔細地分析一下,會發現“$x < 10”(或者說是3<4)這個是字符串的比較;而$y -eq 1(或者說是1 -eq 1)是數值的比較。這個是其一。

另外,echo "$x < 10" | bc的返回值是一個字符串。而在shell中規定了,條件測試的結果爲假是:1、數值0;2、空字符串等。

所以,在腳本1中while [ `echo "$x < 10" | bc` ]的結果一直都會爲真(因爲`echo "$x < 10" | bc`的返回值爲一個字符串)。

在腳本2中,將`echo "$x < 10" | bc`的返回值存入變量y中,再對y進行判斷。這樣,就可以實現了對浮點數的判斷了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章