2014-09-19 143 views
0
typeset -i STARTTIME=`expr $STARTHOUR \* 60 \* 60 + $STARTMINUTE \* 60 + $STARTSECOND` 
echo $STARTTIME 
typeset -i ENDTIME=`expr $ENDHOUR \* 60 \* 60 + $ENDMINUTE \* 60 + $ENDSECOND` 
echo $ENDTIME 

typeset -i ELAPSED=`expr $ENDTIME - $STARTTIME` 
    typeset -i PREVIOUSTIME=`cat previouscompletion${wf}.txt` 

    if [$ELAPSED -ne $PREVIOUSTIME]; then 
    echo $ELAPSED > previouscompletion${wf}.txt 
    fi 

上面是我試圖在AIX 6.1服務器上的bash腳本中運行的if語句。AIX 6.1如果在Bash腳本中找不到命令

那是什麼給我,當我嘗試雖然運行它,是在呼應正確的數字,但一旦它擊中的if語句就嘎嘎叫着,並給了我

./wf_zabbix_test.sh: line 46: [8: command not found 

我已經得到的情況下塊在AIX上工作,但僅在比較字符串變量時,但我無法獲得任何這些比較以使用整數。令人遺憾的是,AIX手冊極其缺乏信息,而我所能夠使用的所有內容似乎都更多地用於其他Linux發行版。

任何幫助,即使只是一個頁面的鏈接,以及如何在AIX中執行darn if語句,將不勝感激。

+1

你需要'['和']''周圍的空格。 '如果[$ ELAPSED -ne $ PREVIOUSTIME];然後' – 2014-09-19 20:10:35

回答

0

[不是if的語法,而是命令]是(並且必須是)它的最後一個參數(這就是爲什麼如果你將then放在同一行上,那麼後面必須有; - 如你所做的那樣 作爲任何命令,它返回一個值並且if只是看着這個返回值做then(用0返回)或else(否則)。

此外,如任何命令,必須有命令和第一參數($ELAPSED)之間的至少一個空間。

關於$PREVIOUSTIME],您在$ PREVIOUSTIME後連接了一個字符],所以命令[只能看到一個參數r而不是2($PREVIOUSTIME])。

只需添加空格。

if [ $ELAPSED -ne $PREVIOUSTIME ] 
then 
    echo $ELAPSED > previouscompletion$wf.txt 
fi 

只要是明確的,並表明是一個參數:if [ $ELAPSED -ne $PREVIOUSTIME "]"if [ $ELAPSED -ne $PREVIOUSTIME ']'也將是語法確定。

+0

添加爲我工作的空間,並獲得其他腳本中其他if語句以及其他語句。是否有一個好的地方可以深入研究語法與命令之間的差異?看到我完全不知道括號是否僅僅包含邏輯測試。謝謝! – Kyle 2014-09-19 20:36:16

+0

我可以給你的唯一鏈接是:http://www.tldp.org/LDP/abs/html/special-chars.html(其他頁面也很有趣,我喜歡這些例子)。我自己從中學到了很多東西。 – syme 2014-09-19 20:47:26

+0

@Kyle:試試[Bash Reference Manual](http://www.gnu.org/software/bash/manual/html_node/index.html);它也應該可以通過輸入'info bash'來獲得。 – 2014-09-19 20:49:24