if, elif, else statement issues in Bash

后端 未结 5 2170
忘了有多久
忘了有多久 2020-11-28 01:25

I can\'t seem to work out what the issue with the following if statement is in regards to the elif and then. Keep in mind the pr

相关标签:
5条回答
  • 2020-11-28 01:47

    You have some syntax issues with your script. Here is a fixed version:

    #!/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
    
    0 讨论(0)
  • 2020-11-28 01:51

    I would recommend you having a look at the basics of conditioning in bash.

    The symbol "[" is a command and must have a whitespace prior to it. If you don't give whitespace after your elif, the system interprets elif[ as a a particular command which is definitely not what you'd want at this time.

    Usage:

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

    In short, edit your code segment to:

    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
    
    0 讨论(0)
  • 2020-11-28 01:51

    Missing space between elif and [ rest your program is correct. you need to correct it an check it out. here is fixed program:

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

    useful link related to this bash if else statement

    0 讨论(0)
  • 2020-11-28 02:02

    [ is a command (or a builtin in some shells). It must be separated by whitespace from the preceding statement:

    elif [
    
    0 讨论(0)
  • 2020-11-28 02:06

    There is a space missing between elif and [:

    elif[ "$seconds" -gt 0 ]
    

    should be

    elif [ "$seconds" -gt 0 ]
    

    As I see this question is getting a lot of views, it is important to indicate that the syntax to follow is:

    if [ conditions ]
    # ^ ^          ^
    

    meaning that spaces are needed around the brackets. Otherwise, it won't work. This is because [ itself is a command.

    The reason why you are not seeing something like elif[: command not found (or similar) is that after seeing if and then, the shell is looking for either elif, else, or fi. However it finds another then (after the mis-formatted elif[). Only after having parsed the statement it would be executed (and an error message like elif[: command not found would be output).

    0 讨论(0)
提交回复
热议问题