2012-05-24 67 views
0

它幾乎檢查文件'ok.temp'是否存在。如果它沒有進入睡眠循環2秒鐘,然後再次檢查。在文件被認爲存在後,它會繼續。儘管文件存在於bash中

不幸的是,我發現了下面的代碼下面陳述的錯誤:

#!/bin/sh 
# Read the sensor values 
if [ ! -f saved.txt ] 
then 
    touch saved.txt 
fi 

#saved values count 
sCount=0 

#value aggregates 
vTTemp=0 
vTHumid=0 
vTLux=0 

#previous aggregates 
pTTemp=0 
pTHumid=0 
pTLux=0 

while : 
do 
vTemp=0 
vHumid=0 
vLux=0 

if [ $sCount -gt 0 ] 
then 
    if [ $(($sCount % 5)) -eq 0 ] 
    then 
     #set previous aggregates as current 
     pTTemp=$vTTemp 
     pTHumid=$vTHumid 
     pTLux=$vTLux 

     #reset current aggregates 
     vTTemp=0 
     vTHumid=0 
     vTLux=0 
    fi 
fi 

    while [ ! –f ok.temp ] 
    do 
     sleep 20 
    done 

    if [ -f logfile.txt ] 
    then 
     rResult=`tail -1 logfile.txt` 
     rSaved=`tail -1 saved.txt` 
     if [ $rResult -eq $rSaved ] 
     then 
      vTemp=`echo $rResult | cut -d" " -f1` 
      vHumid=`echo $rResult | cut -d" " -f2` 
      vLux=`echo $rResult | cut -d" " -f3` 
      echo $rResult >> saved.txt 

      # aggregate results 
      vTTemp=`expr $vTTemp + $vTemp` 
      vTHumid=`expr $vTHumid + $vHumid` 
      vTLux=`expr $vTLux + $vLux` 
      echo 'Most recent results recieved from sensor has been saved' 
     else 
      echo 'Most recent result has already been saved, skipping' 
     fi 
    fi 

    echo '[Previous] Temp:'$pTTemp' Humid:'$pTHumid' Lux:'$pTLux 
    echo '[Current] Temp:'$vTTemp' Humid:'$vTHumid' Lux:'$vTLux 

    sCount=`expr $sCount + 1` 
done 

而且我得到這些錯誤:

43行=而[! -f ok.t​​emp]

line 43: [: f: unary operator expected 

線52 =如果[$ rResult -eq $ rSaved]

line 52: [: too many arguments 

任何幫助,將不勝感激:)

+0

哪些是第43和52行? (tl; dr) –

+0

剛編輯+添加:) – Linky

+0

請至少替換導致錯誤的行。否則,有人想看到他們必須點擊「編輯」鏈接。您的問題和下面的答案可能會使通過搜索來到此問題的其他人受益。 –

回答

0

最有可能是因爲你」重新使用在方括號內爲空的未加引號的變量。您可以通過使用首選的雙方括號形式或引用變量來解決此問題(兩者都不是必需的)。

您已經標記了您的問題,但是您的shebang說#!/bin/sh並且腳本的形式遵循Bourne shell約定,而不是使用Bash特定的功能。如果你願意,我可以評論你如何利用這些Bash特性。

+0

通過使用引號和==代替-eq來修復第52行中的字符串比較。 行43錯誤繼續:( – Linky

+0

@Linky:我看不出有什麼理由'while'語句應該給你這個錯誤。你在使用什麼shell?操作系統是什麼? –

+0

ahhh我的道歉讓我們繼續與shebang 。我現在編輯標籤。 – Linky

0

可能某些變量未在腳本中設置或爲空。您可以設置set -x打開調試模式。

1

這不是第43行中的短劃線 - 它是en dash(複製它並在該頁面上進行搜索以查看它)。您是否從博客複製該代碼?他們經常在不應該的地方進行替換。該代碼應閱讀:

while [ ! -f ok.temp ] 

-eq是數字,而不是字符串 - 這應該做的伎倆(引號是重要):

if [ "$rResult" = "$rSaved" ] 
+1

你有上級願景並因此贏得一整個互聯網+1 –

+0

請詳細解釋一下,我應該改變什麼? – Linky

+0

@ l0b0不,我沒有從博客複製代碼,但是我從我們的講師的骨架腳本示例提示中取消了pdf。我真的很驚訝,你實際上撿起它,你有完美的視力。你先生,是男人之間的王。我謝謝你! – Linky

0

你的一個變量是空的,或者包含多個單詞。使用報價:

if [ "$rResult" = "$rSaved" ] 
相關問題