首页 文章

如果,elif,其他声明在Bash中发布

提问于
浏览
188

我似乎无法弄清楚以下 if 语句的问题是关于 elifthen . 请记住 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

4 回答

  • 16

    elif[ 之间缺少空格:

    elif[ "$seconds" -gt 0 ]
    

    应该

    elif [ "$seconds" -gt 0 ]
    

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

    if [ conditions ]
    # ^ ^          ^
    

    意思是 spaces are needed around the brackets . 否则,它将无法正常工作 . 这是因为 [ 本身就是一个命令 .

  • 151

    您的脚本存在一些语法问题 . 这是一个固定版本:

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

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

    elif [
    
  • 0

    我建议你看看bash中的条件基础知识 .

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

    Usage:

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

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

    elif [ "$seconds" -gt 0 ]
    

    You'd be fine with no compilation errors. Your final code segment should look like this:

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

相关问题