Shell脚本。如果声明不起作用

时间:2012-10-19 08:15:02

标签: shell if-statement

我写了一个小shell scipt,但我无法让我的if语句工作。

我正在通过文件(14380行和134列)运行while循环,我想按照条件number in column 4 > 6 and number in column 4 < 7对某些行进行一些工作。第4列中的数字是一个实数,我知道if语句只能用整数运算。这是我的问题吗?我认为if语句会将我的号码get_lon读作一个整数,例如。 get_lon=14.824它会将其读作get_lon=14。这样就可以了。 很长一段时间后,它没有给出错误消息,但它不会按我的意愿过滤数据。现在,文件的所有行都经过测试。

#!/bin/bash/sh
ulimit -s unlimited
datafile=$1

wfno=0
cat $datafile | while read line 

do        
    wfno=`expr $wfno + 1`  
    echo $wfno      

    get_lon=`awk '(NR=='$wfno'){print $4}' $datafile`
    echo $get_lon

    if test ["$get_lon" > "6" -a "$get_lon" < "7"] 
    then      
        awk '(NR=='$wfno'){for(i=7;i<=NF;i++){print i-7, $i;}}' $datafile > xy
        echo 'awk done '

        some more stuff...
    else
        echo "Line not valid"
    fi
done

拜托,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

使用-gt(大于)和-lt(小于)来比较整数。

if ["$get_lon" -gt "6" -a "$get_lon" -lt "7"]

答案 1 :(得分:0)

您需要在[

之后添加空格

即使是花车,下面也适用于我:

if [ "$count" -gt 1 -a "$count" -lt 2 ]|bc

测试如下:

> cat temp.sh
#!/bin/sh

count=1.5
if [ "$count" -gt 1 -a "$count" -lt 2 ]|bc
then
echo "yes"
fi
> temp.sh
yes
> 

答案 2 :(得分:0)

在测试浮动数字时使用exprbc

if expr "$get_lon" '>' 6 && expr "$get_lon" '<' 7; then
    ...
fi

或者

if [ "$(echo "$get_lon > 6" | bc)" = 1 -a "$(echo "$get_lon < 7" | bc)" = 1 ]; then
    ...
fi

建议使用expr,因为它不需要命令替换。