2012-03-07 54 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 

希望这会有所帮助!