2012-10-19 55 views
0

我已經寫了一個小shell scipt,但我無法讓我的if語句正常工作。Shell腳本。如果聲明不起作用

我正在通過一個文件(14380行和134列)運行while循環,並且我想在遵循條件number in column 4 > 6 and number in column 4 < 7的某些行上執行一些工作。第4列中的數字是一個實數,我知道if語句只能用整數運算。這是我的問題嗎?我認爲if語句會把我的號碼get_lon看作是一個整數,例如。它會將其讀作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 

請問,任何人都可以幫忙嗎?

+1

你確定'/ bin/bash/sh'是一個shell嗎? – chepner

回答

0

使用-gt(大於)和-lt(小於)來比較整數。

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

我已經嘗試了這個,但得到一個錯誤:'測試:非法號碼:[93.31354450' 93.31 ...是'get_lon' – user1643523

+0

,如果我刪除'測試'我得到:'[93.31929210:找不到' – user1643523

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 
> 
+0

我仍然出現錯誤:'[:非法號碼:93.33649580'。我試圖刪除''',但它沒有任何區別。 – user1643523

+0

試試這個:if [「$ get_lon」> 6 -a「$ get_lon」<7] – Vijay

+0

我得到錯誤:'無法打開7 :沒有這樣的文件# – user1643523

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建議更因爲它不需要命令替換。