在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进行判断。这样,就可以实现了对浮点数的判断了。