我似乎无法弄清楚以下 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
if
和 elif
中的 then
语句而不是 else
中的语句,而且一般情况下也是如此。
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
和 then
之后,shell 正在寻找 elif
、else
或 fi
。但是它会找到另一个 then
(在格式错误的 elif[
之后)。只有 在 解析了语句之后才会执行(并且会输出像 elif[: command not found
这样的错误消息)。
您的脚本存在一些语法问题。这是一个固定版本:
#!/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-then-else”的构造...谢谢。
#!/bin/sh
。
#!/bin/sh
,但不是必须的。
sh
来提高兼容性(并非所有 *nix 发行版都有 bash 作为默认外壳(有些有 ksh 或 ash,但它们中的大多数确实依赖于标准 sh
此外,如果脚本中没有使用 bash 的特定或高级功能,那么应该使用“sh”作为解释器(这是另一个原因),因为它可以自行处理脚本。
[
是一个命令(或某些 shell 中的内置命令)。它必须与前面的语句用空格分隔:
elif [
type -a [
来查看。
我建议您看一下 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
和 [
之间缺少空格休息您的程序是正确的。你需要纠正它并检查一下。这是固定程序:
#!/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 statement 相关的有用链接
不定期副业成功案例分享
$ man [
if test "$seconds" -eq 0; then ... fi
等同于if [ "$seconds" -eq 0 ];then ... fi ]
。 @LeiYangman test
是你真正想要的