LinuxQuestions.org
Share your knowledge at the LQ Wiki.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices

Reply
 
Search this Thread
Old 08-15-2011, 05:52 AM   #1
rmaier9
LQ Newbie
 
Registered: Aug 2011
Posts: 2

Rep: Reputation: Disabled
Bash script problem: syntax error near unexpected token `do


Hello,

I am having a problem running a bash script, and I get the following problem:

Code:
: command not found
'eatFlux: line 4: syntax error near unexpected token `do
'eatFlux: line 4: `do
The code is as follows:

Code:
#!/usr/bin/bash

for a in 10 20 30 40 50 60 70 80 90

do

	for b in 5 15 25 35 45 55 65 75 85

	do

		cp ./a$a/b$b/BoundaryHeatFlux.txt ./

		/home/CFD_Filmgruppe/HeatTransferAndMarangoni_Simulations/Studienarbeit_Robert_Maier/TestCases/TestCase_2D/k_as_function_of_a_B/Shell/heatFluxGather $a $b

		rm BoundaryHeatFlux.txt

	done

done

I have a bunch of test cases that I ran in various folders. Each folder has a .txt file with some data I would like to collect and write into one .txt file. The read and write part is executed by the 'heatFluxGather' code. The bash just retrieves the data. Any recommendations as to how to fix or improve the script would be nice too.

Thanks,

Robert
 
Old 08-15-2011, 07:49 AM   #2
tommylovell
Member
 
Registered: Nov 2005
Distribution: Fedora, Redhat
Posts: 372

Rep: Reputation: 101Reputation: 101
I changed your script like this (/usr/bin/bash to /bin/bash and preceded your cp, heatFluxGather and rm with echo),
Code:
[root@athlon ~]# cat heatFlux 
#!/bin/bash

for a in 10 20 30 40 50 60 70 80 90

do

        for b in 5 15 25 35 45 55 65 75 85

        do

                echo cp ./a$a/b$b/BoundaryHeatFlux.txt ./

                echo /home/CFD_Filmgruppe/HeatTransferAndMarangoni_Simulations/Studienarbeit_Robert_Maier/TestCases/TestCase_2D/k_as_function_of_a_B/Shell/heatFluxGather $a $b

                echo rm BoundaryHeatFlux.txt

        done

done
[root@athlon ~]#
Then I ran heatFlux,
Code:
[root@athlon ~]# ./heatFlux | head
cp ./a10/b5/BoundaryHeatFlux.txt ./
/home/CFD_Filmgruppe/HeatTransferAndMarangoni_Simulations/Studienarbeit_Robert_Maier/TestCases/TestCase_2D/k_as_function_of_a_B/Shell/heatFluxGather 10 5
rm BoundaryHeatFlux.txt
cp ./a10/b15/BoundaryHeatFlux.txt ./
/home/CFD_Filmgruppe/HeatTransferAndMarangoni_Simulations/Studienarbeit_Robert_Maier/TestCases/TestCase_2D/k_as_function_of_a_B/Shell/heatFluxGather 10 15
rm BoundaryHeatFlux.txt
cp ./a10/b25/BoundaryHeatFlux.txt ./
/home/CFD_Filmgruppe/HeatTransferAndMarangoni_Simulations/Studienarbeit_Robert_Maier/TestCases/TestCase_2D/k_as_function_of_a_B/Shell/heatFluxGather 10 25
rm BoundaryHeatFlux.txt
cp ./a10/b35/BoundaryHeatFlux.txt ./
[root@athlon ~]#

I suspect you are having a problem with lineend characters. The 'file' command should tell you what they are (if that command is available on the Unix you are on).
Code:
[root@athlon ~]# file heatFlux 
heatFlux: Bourne-Again shell script, ASCII text executable
Code:
[root@athlon ~]# unix2dos heatFlux 
unix2dos: converting file heatFlux to DOS format ...
[root@athlon ~]# file heatFlux 
heatFlux: Bourne-Again shell script, ASCII text executable, with CRLF line terminators
Code:
[root@athlon ~]# dos2unix heatFlux 
dos2unix: converting file heatFlux to Unix format ...

[root@athlon ~]# file heatFlux 
heatFlux: Bourne-Again shell script, ASCII text executable

[root@athlon ~]# unix2mac heatFlux 
unix2dos: converting file heatFlux to Mac format ...

[root@athlon ~]# file heatFlux 
heatFlux: Bourne-Again shell script, ASCII text executable, with CR line terminators
[root@athlon ~]#
To see what is actually in the file, type hexdump -C -n 64 heatFlux (if you have hexdump).
Code:
[root@athlon ~]# hexdump -C -n 64 heatFlux 
00000000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 0a 66 6f 72  |#!/bin/bash..for|
00000010  20 61 20 69 6e 20 31 30  20 32 30 20 33 30 20 34  | a in 10 20 30 4|
00000020  30 20 35 30 20 36 30 20  37 30 20 38 30 20 39 30  |0 50 60 70 80 90|
00000030  0a 0a 64 6f 0a 0a 09 66  6f 72 20 62 20 69 6e 20  |..do...for b in |
00000040
If you don't have hexdump, try od -c heatFlux | head
Code:
[root@athlon ~]# od -c heatFlux | head
0000000   #   !   /   b   i   n   /   b   a   s   h  \n  \n   f   o   r
0000020       a       i   n       1   0       2   0       3   0       4
0000040   0       5   0       6   0       7   0       8   0       9   0
0000060  \n  \n   d   o  \n  \n  \t   f   o   r       b       i   n    
0000100   5       1   5       2   5       3   5       4   5       5   5
0000120       6   5       7   5       8   5  \n  \n  \t   d   o  \n  \n
0000140  \t  \t   e   c   h   o       c   p       .   /   a   $   a   /
0000160   b   $   b   /   B   o   u   n   d   a   r   y   H   e   a   t
0000200   F   l   u   x   .   t   x   t       .   /  \n  \n  \t  \t   e
0000220   c   h   o       /   h   o   m   e   /   C   F   D   _   F   i
[root@athlon ~]#
See my lineend is '0a' or '\n'. You sometimes get this sort of problem when you do a binary ftp of an ascii file from one system to another, like from MS to Linux or Unix, or Mac to Linux or Unix. See http://stackoverflow.com/questions/2...ad-interpreter

If that's the case you can try dos2unix or mac2unix to fix the script file, although they not be available on your flavor of Unix. If bad lineend's are not the case then I can't help.

In terms of a suggested style, make your variables upper case ("for a in 10 20..." would be "for A in 10 20..."; and "cp ./a$a/b$b/..." and "...heatFluxGather $a $b" would be "cp ./a$A/b$B/..." and "...heatFluxGather $A $B".

I'd lose most of the extra blank lines you have inserted (probably for readability).

And I think you want an explicit path to the file in your remove command. (If you have a script with references to a particularly long path or one that is used multiple times, it's common to make it a variable that gets used in multiple places - just don't call it PATH.)

ps. you should mention what Unix you are running. My response is for Linux, but in general I think some of it should apply.

Hope this helps.

Last edited by tommylovell; 08-15-2011 at 07:56 AM.
 
Old 08-15-2011, 09:15 AM   #3
rmaier9
LQ Newbie
 
Registered: Aug 2011
Posts: 2

Original Poster
Rep: Reputation: Disabled
Thanks, tommylovell. This has been bothering me for a while now. Based on your recommendation, I just opened a new file and rewrote the script with some of your advice, and it worked great. Thanks a lot.

Cheers.
 
Old 08-21-2014, 05:20 AM   #4
praju1
LQ Newbie
 
Registered: Aug 2014
Posts: 1

Rep: Reputation: Disabled
Thanks, tommylovell. In my case, I was trying to execute the script file(written on Windows system) on linux system. So tried with command as :
Code:
$ dos2unix abc.sh 
dos2unix: converting file abc.sh to UNIX format ...
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[SOLVED] bash: syntax error near unexpected token `(' rc5gd Programming 6 07-13-2010 08:54 PM
[SOLVED] bash: syntax error near unexpected token `else' lucmove Programming 9 05-10-2010 09:03 PM
bash: syntax error near unexpected token `(' Folklore Linux - Newbie 1 05-02-2010 03:35 AM
-bash: syntax error near unexpected token ty1on Linux - Newbie 3 08-26-2009 02:19 PM
Trouble with Bash -- syntax error near unexpected token `fi' anamericanjoe Programming 5 05-19-2006 02:59 PM


All times are GMT -5. The time now is 04:12 AM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration