Bash中If,Elif,Else 语句问题

if, elif, else statement issues in Bash

本问题已经有最佳答案,请猛点这里访问。

我似乎不知道下面的if声明中关于elifthen的问题是什么。请记住,printf仍在开发中,我只是还没有在声明中测试它,所以很可能是错误的。

我得到的错误是:

1
2
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

这句话是这样的。

1
2
3
4
5
6
7
8
if ["$seconds" -eq 0 ];then
   $timezone_string="Z"
elif["$seconds" -gt 0 ]
then
   $timezone_string=`printf"%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
   echo"Unknown parameter"
fi


elif[之间缺少一个空格:

1
elif["$seconds" -gt 0 ]

应该是

1
elif ["$seconds" -gt 0 ]

正如我看到的,这个问题得到了很多的看法,重要的是指出要遵循的语法是:

1
2
if [ conditions ]
# ^ ^          ^

这意味着括号周围需要空格。否则,它就不起作用了。这是因为[本身就是一个命令。


您的脚本有一些语法问题。以下是固定版本:

1
2
3
4
5
6
7
8
9
#!/bin/bash

if ["$seconds" -eq 0 ]; then
   timezone_string="Z"
elif ["$seconds" -gt 0 ]; then
   timezone_string=$(printf"%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo"Unknown parameter"
fi


[是一个命令。它必须用空格与前面的语句分隔:

1
elif [


我建议你看看bash中的基本条件。

符号"["是一个命令,它前面必须有空格。如果在elif之后没有给出空格,系统会将elif[解释为一个特定的命令,这绝对不是您现在想要的。

用途:

1
elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]

简而言之,将代码段编辑为:

1
elif ["$seconds" -gt 0 ]

你不会有编译错误的。最后的代码段应该如下所示:

1
2
3
4
5
6
7
8
9
#!/bin/sh    
if ["$seconds" -eq 0 ];then
       $timezone_string="Z"
    elif ["$seconds" -gt 0 ]
    then
       $timezone_string=`printf"%02d:%02d" $seconds/3600 ($seconds/60)%60`
    else
       echo"Unknown parameter"
    fi