2011-08-19 111 views
1

我不知所措,爲什麼這是給一個語法錯誤。有什麼想法嗎?猛砸if語句語法錯誤

#!/bin/bash 

if [ `date +%H` -lt 11 ] ; then exit 0; 
fi 

if [ `date +%H` -gt 14 ] ; then 
    if[ `date +%H` -lt 20 ] ; then # <--- this line is the culprit, it seems 
    exit 0; 
    fi 
fi 

運行時,我得到:

./get.sh: line 7: syntax error near unexpected token `then' 
./get.sh: line 7: ` if[ `date +%H` -lt 20 ] ; then ' 
+1

編輯器與語法高亮可以幫助你在類似的情況。我的gedit不高亮第二'if'在你的代碼 – RiaD

回答

4

其原因,這是一個語法錯誤是[不是殼語法的一部分;它實際上是一個命令。最初它只是test命令的符號鏈接。它仍然是,但它也是bash和其他Bourne衍生shell中的內置命令。

if一個shell關鍵字,但shell看到if[,而不是if。因爲它沒有看到一個if,它不知道,當它看到then做什麼。 (實際上,它知道該怎麼做:打印語法錯誤消息)

...

實驗的一位表示,這不是一件簡單的事情,因爲我認爲這是。我嘗試創建一個名爲if[的命令,並將其放在我的$PATH的目錄中。當我在提示符下鍵入if[時,shell會要求輸入更多信息。我其實不知道它在找什麼,但顯然[這個字符是被shell特別處理的。外殼只是不分裂if[if關鍵字和[命令(正如你可能有理由期待基於其他語言是如何工作的)。 (如果我真的想執行那個命令,我可以輸入\if["if[" - 或者先給它一個理智的名字

在任何情況下,最後一部分可能沒有關係;添加一個空格字符將解決這個問題。

+0

謝謝!由於缺乏空間有沒有,即使在我的大腦登記,更不用說作爲一個可能的罪魁禍首。 – CoolUserName

1

添加空間之前[

if [ `date +%H` -lt 20 ] 
1
if[ `date +%H` -lt 20 ] ; 

需要後放置空間if

if [ `date +%H` -lt 20 ] ;