if, elif, else statement issues in Bash
本问题已经有最佳答案,请猛点这里访问。
我似乎不知道下面的
我得到的错误是:
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 |
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 |