sh script if then else error



  • Hello,

    I'm just using my Onion Omega2+ and an asolutely newbie. I made my first very simple script to play a webradio on my boxes and it was a success. Now I want to play several channels by using arguments, first with only 2. When I run my script (sh webradio.sh 2) I've got a syntax error: unexpected "elif" (expecting "then").

    script:
    _Webradio () {
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€
    echo €€ stop playing sounds... €€
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€
    killall mpg123
    echo parameter $1

    if  [ "$1" = "1" ] then 
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Hitradio Maroc... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
      
    elif [ "$1" = "2" ]
    then
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Topradio... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://jwmp3.topradio.be/topradio.mp3
    #else
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Hitradio Maroc... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
    fi
    
    echo url=$url
    mpg123 $url
    

    }

    Main Program

    run the function and pass in all of the arguments

    _Webradio "$1"

    output:
    €€€€€€€€€€€€€€€€€€€€€€€€€€€€
    €€ stop playing sounds... €€
    €€€€€€€€€€€€€€€€€€€€€€€€€€€€
    : no process killed
    parameter 2
    : not found: line 8:
    webradio.sh: line 15: syntax error: unexpected "elif" (expecting "then")
    root@Omega-FAF7:~#

    Also other very simple script doesn't work with a if then else:
    #!/bin/bash

    Basic if statement

    if [ $1 -gt 100 ] then
    echo Hey that's a large number.
    pwd
    fi
    date

    output:
    testifelse.sh: line 7: syntax error: unexpected end of file (expecting "th
    en")

    Can someone exlain me what I do wrong? Do I need to install some lib or something? Very simple script do work but a simple if then else does not work.

    Thanks in advance.



  • Very counterintuitively, you need a command separator before then. So, instead of

    if  [ "$1" = "1" ] then …
    

    just write

    if  [ "$1" = "1" ]; then …
    

    Or put the then on the next line

     if  [ "$1" = "1" ]
     then
       …
    

    (as you already did in the elifcase)

    Just think of then, elif, fi, do etc. as regular shell commands that need to start on a fresh line or must be separated by ';' from the previous command on the same line.



  • @luz

    Thanks for your reply. I tried both: the then on the second line and with a ; but it is the same:
    if [ "$1" = "1" ]
    then
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
    echo €€ launching webradio Hitradio Maroc... €€
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
    url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3

    elif [ "$1" = "2" ]
    then
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Topradio... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://jwmp3.topradio.be/topradio.mp3
    #else
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Hitradio Maroc... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
    fi
    

    result: line 36: syntax error: unexpected end of file (expecting "then")

    and
    if [ "$1" = "1" ]; then
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
    echo €€ launching webradio Hitradio Maroc... €€
    echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
    url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3

    elif [ "$1" = "2" ]
    then
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Topradio... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://jwmp3.topradio.be/topradio.mp3
    #else
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      echo €€ launching webradio Hitradio Maroc... €€
      echo €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
    fi
    

    but result also in line 35: syntax error: unexpected end of file (expecting "then")

    I really don't know what I do wrong.

    Best regards,
    Glenn



  • @Glenn-De-Vriendt I'm afraid using character(s) in shell script is a bad idea.

    This can be a working version of your script (19 lines).

    #!/bin/sh
    if [ "$1" = "1" ]
    then
      echo "####################################"
      echo "## launching webradio Topradio... ##"
      echo "####################################"
      url=http://jwmp3.topradio.be/topradio.mp3
    elif [ "$1" = "2" ]
    then
      echo "####################################"
      echo "## launching webradio Topradio... ##"
      echo "####################################"
      url=http://jwmp3.topradio.be/topradio.mp3
    #else
      echo "##########################################"
      echo "## launching webradio Hitradio Maroc... ##"
      echo "##########################################"
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
    fi
    

    The same script without some unnecessary lines (14 lines).

    #!/bin/sh
    if [ "$1" = "1" ]
    then
      echo "####################################"
      echo "## launching webradio Topradio... ##"
      echo "####################################"
      url=http://jwmp3.topradio.be/topradio.mp3
    elif [ "$1" = "2" ]
    then
      echo "##########################################"
      echo "## launching webradio Hitradio Maroc... ##"
      echo "##########################################"
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
    fi
    

    Happy scripting!



  • @György-Farkas

    Thanks for your tips. I changed the € into # and the quotes after echo. The else was for having a default (which I would change later in the first if => $1 = 1 OR $1 IS NULL).

    if  [ "$1" = "1" ]
    then 
      echo "##########################################"
      echo "## launching webradio Hitradio Maroc... ##"
      echo "##########################################"
      url=http://hitradio-maroc.ice.infomaniak.ch/hitradio-maroc-128.mp3
      
    elif [ "$1" = "2" ]
    then
      echo "####################################"
      echo "## launching webradio Topradio... ##"
      echo "####################################"
      url=http://jwmp3.topradio.be/topradio.mp3
    fi
    

    I still have the same error:
    ####################################
    '## stop playing sounds... ##
    ####################################
    : no process killed
    parameter
    : not found: line 8:
    webradio.sh: line 36: syntax error: unexpected end of file (expecting "then")
    root@Omega-FAF7:~#

    Even if I run the most basic script I get the same error:

    #!/bin/bash
    # Basic if statement
    if [ 1 = 1 ] 
    then
      echo "Equal"
    fi
    

    if.sh: line 6: syntax error: unexpected "fi" (expecting "then")

    I also tried to change #!/bin/bash to #!/bin/sh or leave it but saddly the same result.

    Also a simple case statement doesn't work:

    #!/bin/sh
    
    # use case statement to make decision
    case $choose in
       "one") echo "First option.";;
       "two") echo "Second option.";;
       "three") echo "Third option.";;
       "four") echo "Fourth option.";;
       "five") echo "Fifth option.";;
       "six") echo "Last option.";;
       *) echo "Sorry, no parameter found!";;
    esac
    

    root@Omega-FAF7:~# sh case.sh "one"
    : not foundne 2:
    case.sh: line 4: syntax error: unexpected word (expecting "in")

    Do I need to install something for using this statements?

    Thanks in advance.



  • @Glenn-De-Vriendt Hmm. This script runs on my Omega2 (FW v0.3.2 b232) flawlessly.

    #!/bin/bash
    # Basic if statement
    if [ 1 = 1 ] 
    then
      echo "Equal"
    fi
    

    Do I need to install something for using this statements?

    My Omega2 is almost in factory state. I've only changed the passwords and installed 'nano'.

    Omega2's default shell is 'ash'.
    So - I think - the correct shebang is #!/bin/ash or #!/bin/sh.



  • Thanks @György-Farkas

    The default shell is indeed 'ash'. I changed the shebang to #!/bin/ash but I've got the same result.



  • @Glenn-De-Vriendt Yes. This was only a notice.

    The default shell is indeed 'ash'. I changed the shebang to #!/bin/ash but I've got the same result.


    I don't understand how did you get this error message:
    line 36: syntax error: unexpected end of file (expecting "then")
    if your script is definitely shorter has only 19 lines.



  • @Glenn-De-Vriendt Here you are a working "simple" case example:

    #!/bin/sh
    
    # use case statement to make decision
    
    case $1 in
      1)
        echo "First option."
        ;;
      2)
        echo "Second option."
        ;;
      3)
        echo "Third option."
        ;;
      4)
        echo "Fourth option."
        ;;
      5)
        echo "Fifth option."
        ;;
      6)
        echo "Sixth option."
        ;;
      *)
        echo "Sorry, no parameter found!"
        ;;
    esac
    


  • Thanks @György-Farkas

    When I run the script, I see this:

    root@Omega-FAF7:~# sh /root/case2.sh                                                                                                                
    : not found.sh: line 2: 
    : not found.sh: line 4: 
    /root/case2.sh: line 5: syntax error: unexpected word (expecting "in")
    root@Omega-FAF7:~#
    


  • @Glenn-De-Vriendt Let us know your case2.sh please.



  • @Glenn-De-Vriendt Hmm. Your 'case2.sh' file is a Windows text file where the end of line is 'CR LF' (0x0d 0x0a).

    root@Omega-99A5:~# hexdump -C case2.sh
    00000000  23 21 2f 62 69 6e 2f 73  68 0d 0a 0d 0a 23 20 75  |#!/bin/sh....# u|
    00000010  73 65 20 63 61 73 65 20  73 74 61 74 65 6d 65 6e  |se case statemen|
    00000020  74 20 74 6f 20 6d 61 6b  65 20 64 65 63 69 73 69  |t to make decisi|
    00000030  6f 6e 0d 0a 0d 0a 63 61  73 65 20 24 31 20 69 6e  |on....case $1 in|
    00000040  0d 0a 20 20 31 29 0d 0a  20 20 20 20 65 63 68 6f  |..  1)..    echo|
    00000050  20 22 46 69 72 73 74 20  6f 70 74 69 6f 6e 2e 22  | "First option."|
    00000060  0d 0a 20 20 20 20 3b 3b  0d 0a 20 20 32 29 0d 0a  |..    ;;..  2)..|
    00000070  20 20 20 20 65 63 68 6f  20 22 53 65 63 6f 6e 64  |    echo "Second|
    00000080  20 6f 70 74 69 6f 6e 2e  22 0d 0a 20 20 20 20 3b  | option."..    ;|
    00000090  3b 0d 0a 20 20 33 29 0d  0a 20 20 20 20 65 63 68  |;..  3)..    ech|
    000000a0  6f 20 22 54 68 69 72 64  20 6f 70 74 69 6f 6e 2e  |o "Third option.|
    000000b0  22 0d 0a 20 20 20 20 3b  3b 0d 0a 20 20 34 29 0d  |"..    ;;..  4).|
    000000c0  0a 20 20 20 20 65 63 68  6f 20 22 46 6f 75 72 74  |.    echo "Fourt|
    000000d0  68 20 6f 70 74 69 6f 6e  2e 22 0d 0a 20 20 20 20  |h option."..    |
    000000e0  3b 3b 0d 0a 20 20 35 29  0d 0a 20 20 20 20 65 63  |;;..  5)..    ec|
    000000f0  68 6f 20 22 46 69 66 74  68 20 6f 70 74 69 6f 6e  |ho "Fifth option|
    00000100  2e 22 0d 0a 20 20 20 20  3b 3b 0d 0a 20 20 36 29  |."..    ;;..  6)|
    00000110  0d 0a 20 20 20 20 65 63  68 6f 20 22 53 69 78 74  |..    echo "Sixt|
    00000120  68 20 6f 70 74 69 6f 6e  2e 22 0d 0a 20 20 20 20  |h option."..    |
    00000130  3b 3b 0d 0a 20 20 2a 29  0d 0a 20 20 20 20 65 63  |;;..  *)..    ec|
    00000140  68 6f 20 22 53 6f 72 72  79 2c 20 6e 6f 20 70 61  |ho "Sorry, no pa|
    00000150  72 61 6d 65 74 65 72 20  66 6f 75 6e 64 21 22 0d  |rameter found!".|
    00000160  0a 20 20 20 20 3b 3b 0d  0a 65 73 61 63 0d 0a     |.    ;;..esac..|
    0000016f
    

    In a Linux text file the end of line is 'LF' (0x0a).

    root@Omega-99A5:~# hexdump -C case2.sh
    00000000  23 21 2f 62 69 6e 2f 73  68 0a 0a 23 20 75 73 65  |#!/bin/sh..# use|
    00000010  20 63 61 73 65 20 73 74  61 74 65 6d 65 6e 74 20  | case statement |
    00000020  74 6f 20 6d 61 6b 65 20  64 65 63 69 73 69 6f 6e  |to make decision|
    00000030  0a 0a 63 61 73 65 20 24  31 20 69 6e 0a 20 20 31  |..case $1 in.  1|
    00000040  29 0a 20 20 20 20 65 63  68 6f 20 22 46 69 72 73  |).    echo "Firs|
    00000050  74 20 6f 70 74 69 6f 6e  2e 22 0a 20 20 20 20 3b  |t option.".    ;|
    00000060  3b 0a 20 20 32 29 0a 20  20 20 20 65 63 68 6f 20  |;.  2).    echo |
    00000070  22 53 65 63 6f 6e 64 20  6f 70 74 69 6f 6e 2e 22  |"Second option."|
    00000080  0a 20 20 20 20 3b 3b 0a  20 20 33 29 0a 20 20 20  |.    ;;.  3).   |
    00000090  20 65 63 68 6f 20 22 54  68 69 72 64 20 6f 70 74  | echo "Third opt|
    000000a0  69 6f 6e 2e 22 0a 20 20  20 20 3b 3b 0a 20 20 34  |ion.".    ;;.  4|
    000000b0  29 0a 20 20 20 20 65 63  68 6f 20 22 46 6f 75 72  |).    echo "Four|
    000000c0  74 68 20 6f 70 74 69 6f  6e 2e 22 0a 20 20 20 20  |th option.".    |
    000000d0  3b 3b 0a 20 20 35 29 0a  20 20 20 20 65 63 68 6f  |;;.  5).    echo|
    000000e0  20 22 46 69 66 74 68 20  6f 70 74 69 6f 6e 2e 22  | "Fifth option."|
    000000f0  0a 20 20 20 20 3b 3b 0a  20 20 36 29 0a 20 20 20  |.    ;;.  6).   |
    00000100  20 65 63 68 6f 20 22 53  69 78 74 68 20 6f 70 74  | echo "Sixth opt|
    00000110  69 6f 6e 2e 22 0a 20 20  20 20 3b 3b 0a 20 20 2a  |ion.".    ;;.  *|
    00000120  29 0a 20 20 20 20 65 63  68 6f 20 22 53 6f 72 72  |).    echo "Sorr|
    00000130  79 2c 20 6e 6f 20 70 61  72 61 6d 65 74 65 72 20  |y, no parameter |
    00000140  66 6f 75 6e 64 21 22 0a  20 20 20 20 3b 3b 0a 65  |found!".    ;;.e|
    00000150  73 61 63 0a                                       |sac.|
    00000154
    

    Good luck.



  • @György-Farkas
    Thank you very much. I never thought of that. I'll try it and let it know. I wrote it in the editor.



Looks like your connection to Community was lost, please wait while we try to reconnect.