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 $1if [ "$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/bashBasic if statement
if [ $1 -gt 100 ] then
echo Hey that's a large number.
pwd
fi
dateoutput:
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 ofif [ "$1" = "1" ] then …
just write
if [ "$1" = "1" ]; then …
Or put the
then
on the next lineif [ "$1" = "1" ] then …
(as you already did in the
elif
case)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.
-
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.mp3elif [ "$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.mp3elif [ "$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!
-
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 scriptis definitely shorterhas 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.