2012-03-07 53 views
1
if [ "$1" == "on" ]; then 

     echo "Maintenance going on" 
     echo "<maintenance/>" > $MFILE 

else if [ "$1" == "off" ]; then 

     echo "Maintenance going off" 
     rm $MFILE 

else if [ "$1" == "status" ]; then 

     if [ -f $MFILE ]; then 
       echo "Maintenance is ON" 
     else 
       echo "Maintenance is OFF" 
     fi 

else 

     echo "ERROR: Unknown command $1" 
     exit 1 

fi 

如果我嘗試運行此腳本,則會出現「文件意外結束」錯誤。我懷疑這是因爲if/else/else中的某些錯誤,但是我覺得Google很難說出一個語法應該如何的例子。這裏有人知道嗎?「Large」else if bash中的樹

+1

您不應該使用'elif'而不是'else if'嗎? – adarshr 2012-03-07 09:54:37

+0

錯誤屬於stderr,而不是stdout。回聲「錯誤...」>&2 – 2012-03-07 16:12:53

回答

6

「如果別人」

文本從http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html

這是if語句的完整形式,你應該使用 「ELIF」,不是:

如果TEST-命令;那麼

CONSEQUENT-COMMANDS;

elif MORE-TEST-COMMANDS;那麼

MORE-CONSEQUENT-COMMANDS;

else ALTERNATE-CONSEQUENT-COMMANDS;執行

網絡

執行測試,命令列表,如果它的返回狀態是零, 隨之-COMMANDS列表。如果TEST-COMMANDS返回非0狀態,則依次執行每個elif列表,並且如果其退出 狀態爲零,則執行相應的MORE-CONSEQUENT-COMMANDS 並且該命令完成。如果else else後面是 ALTERNATE-CONSEQUENT-COMMANDS列表,並且最後一個命令在最後的 中,如果or elif子句具有非零退出狀態,則執行 ALTERNATE-CONSEQUENT-COMMANDS。返回狀態是執行的最後一個命令的 退出狀態,如果條件 未被測試爲真,則返回狀態爲零。

+0

這就是我很難找到一個例子的意思。 http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-6.html說'else if' – 2012-03-07 09:58:26

6

稍微偏離主題,但不會下面更具可讀性:

case $1 in 
on) 
     echo "Maintenance going on" 
     echo "<maintenance/>" > $MFILE 
     ;; 

off) 

     echo "Maintenance going off" 
     rm $MFILE 
     ;; 

status) 

     if [ -f $MFILE ]; then 
       echo "Maintenance is ON" 
     else 
       echo "Maintenance is OFF" 
     fi 
     ;; 

*)  
     echo "ERROR: Unknown command $1" 
     exit 1 
     ;; 

esac 
+0

我想它會,謝謝。 – 2012-03-07 10:33:02

1

信息的真實來源,而不是依靠隨機的網絡教程。

GNU bash的信息手冊:

$ info bash 

手冊頁:

$ man bash 

統一UNIX規範[殼牌語法]:http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_10

[... scrolling down ...] 
/* The following are the reserved words. */ 

%token If Then Else Elif Fi Do Done 
/*  'if' 'then' 'else' 'elif' 'fi' 'do' 'done' */ 

[...] 
if_clause  : If compound_list Then compound_list else_part Fi 
       | If compound_list Then compound_list   Fi 
       ; 
else_part  : Elif compound_list Then else_part 
       | Else compound_list 
       ; 
+0

這幾天,谷歌的第一次訪問通常不是「隨機的」。 StackOverflow問題通常是其中的事實,是該網站的驅動力之一。但是,謝謝你的信息。 – 2012-03-07 11:13:15

+0

現在,Google的首次訪問是由關鍵字填充搜索引擎優化器驅動的。的確,幾乎沒有隨機性:) – Kaz 2012-03-07 16:45:39

3

elif選項已經被posted by Kent &一個很好的替代品我一直在posted by beny23,我希望這可以提供一些信息。您收到錯誤unexpected end of file的原因是因爲if尚未正確關閉。 (我不知道如果這是卡茲正試圖回答這樣說我加入這個效應初探)方式的bash是看到你的腳本是
if ..
else
..if
.. else
.. .. if
,因而有2個缺fi

if [ "$1" == "on" ]; then #if 1 

     echo "Maintenance going on" 
     echo "<maintenance/>" > $MFILE 

else 
    if [ "$1" == "off" ]; then #if 2 

     echo "Maintenance going off" 
     rm $MFILE 

    else 
     if [ "$1" == "status" ]; then #if 3 

      if [ -f $MFILE ]; then #if 4 
       echo "Maintenance is ON" 
      else 
       echo "Maintenance is OFF" 
      fi #for if 4                                  
     else 
      echo "ERROR: Unknown command $1" 
      exit 1 

     fi #for if 3 
    fi #for if 2 
fi #for if 1 

希望這會有所幫助!