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 Programrun 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 statementif [ $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 thenon the next lineif [ "$1" = "1" ] then …(as you already did in the elifcase)Just think of then,elif,fi,doetc. 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 firesult: 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 fibut 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 fiThe 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 fiHappy 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 fiI 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" fiif.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!";; esacroot@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" fiDo 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..| 0000016fIn 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.| 00000154Good 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.
 
