在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進行判斷。這樣,就可以實現了對浮點數的判斷了。