我似乎无法解决以下if语句在elif和then方面的问题。请记住,printf仍在开发中,我只是还没能在语句中测试它,所以很可能是错误的。

我得到的错误是:

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

这个表述是这样的。

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和[之间有一个空格:

elif[ "$seconds" -gt 0 ]

应该是

elif [ "$seconds" -gt 0 ]

总的来说,要遵循的语法是:

if [ conditions ]; then
   # Things
elif [ other_conditions ]; then
   # Other things
else
   # In case none of the above occurs
fi

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

if [ conditions ]
# ^ ^          ^

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

你没有看到类似elif[: command not found(或类似)的东西的原因是,在看到if and then之后,shell正在寻找elif、else或fi。但是它会在格式错误的elif[)之后找到另一个then()。只有在解析完语句之后,它才会被执行(并且会输出像elif[: command not found这样的错误消息)。


[是命令(或某些shell中的内置命令)。它必须与前面的语句用空格隔开:

elif [

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

#!/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

我建议您了解一下bash中的条件反射基础知识。

符号“[”是一个命令,它前面必须有一个空格。如果你在elif之后没有空格,系统会把elif[解释为一个特定的命令,这肯定不是你现在想要的。

用法:

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

简而言之,编辑你的代码段:

elif [ "$seconds" -gt 0 ]

如果没有编译错误,就会很好。你的最终代码段应该是这样的:

#!/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

elif和[rest程序]之间缺少空格是正确的。你需要修改一下,然后检查一下。这里是固定程序:

#!/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

与bash if else语句相关的有用链接