IF section problem. syntax error: unexpected end of file error


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting IF section problem. syntax error: unexpected end of file error
# 1  
Old 07-31-2014
IF section problem. syntax error: unexpected end of file error

Hello,

I have another problem with my script. Please accept my apologies, but I am really nooby in sh scripts. I am writing it for first time.

My script:
Code:
returned=`tail -50 SapLogs.log | grep -i "Error"`
echo $returned
if [ -n "${returned}" ]; then
    echo "There is no errors in the logs"
fi

And after execution of this script the error message appears:
checklogs.sh: line 11: syntax error: unexpected end of file.

When I delete this section, my script works good.

Thanks a lot for You outstanding help.

Regards,
Adrian
# 2  
Old 07-31-2014
It is always scary when you get a syntax error on line 11 of a 5 line script.

My first comment would be that you should change:
Code:
echo $returned

to:
Code:
echo "$returned"

or better yet (removing problems that could be caused depending on the contents of SapLogs.log):
Code:
printf '%s\n' "$returned"

But that alone isn't likely to be your problem. Maybe if you showed us the whole script and told us what OS and shell you're using, we'd have a better chance of figuring out what is going on.
# 3  
Old 07-31-2014
Hello,

Thanks for prompt reply! Appreciate that.
Please find below whole script:
Code:
#!/bin/bash
echo "=== Checking logs ==="
returned=`tail -50 SapLogs.log | grep -i "Error"`
echo $returned
if [ -n "${returned}" ]; then
    echo "There is no error in the logfile"
fi
echo "=== Last log entry ==="
var=$(tail -1 SapLogs.log | awk '{print substr($0,13,8)}')
echo "Time elapsed since last entry =" $(( $((`date +%s -d $var`)) - $((`date +%s`)) ))

It returns output:
Code:
2014 Jul 28 12:27:47:444 GMT +2 SapLogFile Error [Adapter] AER3-000430 Total requests processed for operation RFC_READ_TEXT : 1945087
checklogs.sh: line 11: syntax error: unexpected end of file

But, what is more interesting, the script:
Code:
#!/bin/bash
echo "=== Checking logs ==="
returned=`tail -50 SapLogs.log | grep -i "Error"`
echo $returned
echo "=== Last log entry ==="
var=$(tail -1 SapLogs.log | awk '{print substr($0,13,8)}')
echo "Time elapsed since last entry =" $(( $((`date +%s -d $var`)) - $((`date +%s`)) ))

Works perfectly. It returns whole data:
Code:
=== Checking logs ===
2014 Jul 28 12:27:47:444 GMT +2 SapLogFile  Error [Adapter] AER3-000430 Total requests processed for operation RFC_READ_TEXT : 1945087
=== Last log entry ===
Time elapsed since last entry = -13490

Unfortunately I don't know how can I check what system I am using.

Regards,
Adrian Jedrzejewski
# 4  
Old 07-31-2014
The command uname -a will tell you what version of what OS you're using.

It is very strange that the output from the 1st script you showed us did not contain the line:
Code:
=== Checking logs ===

Please add the following line to your script between the 1st and 2nd lines:
Code:
set -xv

and show us the output.

I don't see why the following would make any difference in the behavior of your script (except that if there are multiple errors found, they will be printed on separate lines; and a little bit of truth in advertising), but it will use less memory and run faster. Try changing:
Code:
returned=`tail -50 SapLogs.log | grep -i "Error"`
echo $returned
if [ -n "${returned}" ]; then
    echo "There is no error in the logfile"
fi

to:
Code:
tail -50 SapLogs.log | grep -i "Error"
if [ $? ]; then
    echo "There is no error in the last 50 lines in the logfile"
fi

# 5  
Old 07-31-2014
My OS version:
Code:
Linux hostname 2.6.18-128.1.10.el5 #1 SMP Wed Apr 29 13:53:08 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

Unfortunately, it still doesn't work... I am confused a bit now Smilie
When I add set -xv to script the error appears:
Code:
: invalid optionne 2: set: -
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]

My current code is as follows (I've changed filename but content is the same):
Code:
#!/bin/bash
set -xv
echo "=== Checking logs ==="
tail -50 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | grep -i "Error"
if [ $? ]; then
    echo "There is no error in the last 50 lines in the logfile"
fi
echo "=== Last log entry ==="
var=$(tail -1 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | awk '{print substr($0,13,8)}')
echo "Time elapsed since last entry =" $(( $((`date +%s -d $var`)) - $((`date +%s`)) ))

When I delete set -xv the output is:
Code:
=== Checking logs ===
checklogs.sh: line 10: syntax error: unexpected end of file

I really don't know why this simply IF doesn't work...

Regards,
Adrian
# 6  
Old 07-31-2014
I don't think you can just dump a raw number into [ ] like that without telling it what to do with that number. [ "$?" -ne 0 ] or such.

But if you just want to use the return value, do so directly. The ! reverses it to 'if not':

Code:
if ! tail -50 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | grep -i "Error" >/dev/null
then
        echo "There is no error in the last 50 lines in the logfile"
fi

This User Gave Thanks to Corona688 For This Post:
# 7  
Old 07-31-2014
Quote:
Originally Posted by Corona688
I don't think you can just dump a raw number into [ ] like that without telling it what to do with that number. [ "$?" -ne 0 ] or such.

But if you just want to use the return value, do so directly. The ! reverses it to 'if not':

Code:
if ! tail -50 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | grep -i "Error" >/dev/null
then
        echo "There is no error in the last 50 lines in the logfile"
fi

Coronna688,
Ouch. Yes, you're correct. In shell's test, [ "$arg" ] tests for non-empty string; not non-zero and non-empty (as in awk).

For clarity when reading a script, I don't usually use:
Code:
if ! tail -50 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | grep -i "Error" >/dev/null

when the compound-list is more than about 40 characters long, but that is just my personal preference. We don't want the > /dev/null here because this code is replacing earlier code that was:
Code:
returned=`tail -50 SapLogs.log | grep -i "Error"`
echo $returned

and then checking whether "$returned" expands to an empty string.


And, now for the good news...
jedzio,
Know that we know you're using bash on a Linux distro (even though it hasn't been updated for four years), I think I know what the problem is. I should have asked what editor you were using!

To get that error message from bash for the command: set -xv, you must be using an editor that uses the DOS convention of carriage-return followed by newline as the line terminator instead of the UNIX/Linux convention using only the newline.

So, I think you can get your script to work if you write this into a new file (let's call it newscript):
Code:
#!/bin/bash
echo "=== Checking logs ==="
tail -50 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | grep -i "Error"
if [ $? -ne 0 ]; then
    echo "There is no error in the last 50 lines in the logfile"
fi
echo "=== Last log entry ==="
var=$(tail -1 SapAdapterInboundRfc-P30-SapAdapterInboundSynchronous.log | awk '{print substr($0,13,8)}')
echo "Time elapsed since last entry =" $(( $((`date +%s -d $var`)) - $((`date +%s`)) ))

and then run the commands:
Code:
tr -d '\r' < newscript > checklogs.sh
chmod +x checklogs.sh

to remove any extraneous carriage return characters in your script and make it executable again.

Let us know what happens.

We usually only see this problem on files that have been copied from Windows systems to UNIX and Linux systems. I strongly suggest that you look at the documentation for your editor to see if there is a way to set the characters used as line terminators. If there isn't any way to set the line terminator to just a newline (AKA linefeed) character, seriously consider learning how to use vi or emacs instead of your current editor. Extraneous carriage returns in shell scripts, source code for other languages, and in data files will cause you no end of grief.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Unexpected End of File Syntax Error

Hi, I am brand new to this so I apologize ahead of time for any formatting problems. I know there is a previous (closed) thread on here about this problem but I wasn't able to fix the error following the posts there so I thought I could create a new one. Here is the error I am getting: ... (3 Replies)
Discussion started by: SierraG
3 Replies

2. Shell Programming and Scripting

Syntax error `end of file' unexpected

I checked the forum and internet, tried different workaorunds but it didnt fixed the error. Please advise on the code. #!/bin/sh CWD=/home/test/Bench cd $CWD (grep "`date +%d-%b"`" File.txt) > /home/test/Bench/dateout if then echo “data” > /home/test/ Bench /test else echo "File... (16 Replies)
Discussion started by: rajjev_saini123
16 Replies

3. Shell Programming and Scripting

cygwin syntax error: unexpected end of file

Hi, I am getting error while running the script. "syntax error: unexpected end of file" if i do cat i cant see the content of the script also it is showing as cat test.sh doner /home/master/* /home/Priya/$i| while read i j The original script is paste /home/names.txt /home/ip.txt |... (6 Replies)
Discussion started by: ranjancom2000
6 Replies

4. Shell Programming and Scripting

syntax error unexpected end of file

I am new to unix, so thank u for ur patience I try to make it work (to duplicate two first columns in several files): #!/bin/bash for i in `seq 2 5` do awk `{ print $1,$1,$2,$2,$3,$4}` final_chr.${i} > input_${i} done and i get ./my_script3.sh: command substitution: line 5: syntax... (2 Replies)
Discussion started by: kush
2 Replies

5. Shell Programming and Scripting

syntax error: unexpected end of file

I will appreciate help is this matter. i am getting this error (./getwind.scr: line 41: syntax error: unexpected end of file) in the following script : ############################## #QSUB -eo -q sb -lT 1200 -s /bin/csh #Run on an HP-UX machine or norway to access ncks # lat and lon are in... (0 Replies)
Discussion started by: peeriich
0 Replies

6. Shell Programming and Scripting

syntax error: unexpected end of file

Hi, I am newbie to UNIX scripting. I am facing this error "syntax error: unexpected end of file" while executing the following script: ------ a=$1 if then sqlplus -s prospect_stg/prospect_stg@mdmpt <<END insert into bckup_marc_parameter_lookup select * from... (6 Replies)
Discussion started by: boopathyvasagam
6 Replies

7. Shell Programming and Scripting

syntax error: unexpected end of file

Hi, I have problem in constructing "IF" condition. The below code throws "tst.sh: line 10: syntax error: unexpected end of file" #!/bin/ksh test=9 echo $test if ] then echo "in" fi echo "end" exit 0 Actually, i want to check whether the variable $test is empty or null. ... (5 Replies)
Discussion started by: tinku
5 Replies

8. Shell Programming and Scripting

syntax error: unexpected end of file

I have a script that's failing ./zzmaster.sh: line 2: syntax error: unexpected end of file There are 4 scripts total involved. The first 'znocc0.sh' essentially curls a page then does some sed sequences... #!/bin/sh #GET SENTINAL INFO curl -b z0cookie.txt -L -k -e... (2 Replies)
Discussion started by: phpfreak
2 Replies

9. Shell Programming and Scripting

syntax error: unexpected end of file

Hi, I need ur help is this matter, i have th ebelow script, and i keep getting this error: syntax error: unexpected end of file affectedRow=`cat dbOutput.log | grep "1 row affected"` echo "affectedRow : $affectedRow" if ; then echo "Look to the next OMCDB" ... (10 Replies)
Discussion started by: Alaeddin
10 Replies

10. Solaris

syntax error at line 59: `end of file' unexpected

Hello... I'm trying to run the sshd script, but I keep geting the Syntax errot message . Here's the last few lines on the script. set nu in vi shows 58 lines, but I keep getting error referring to line 59. Any help is appreciated. Thanks, Remi else echo... (4 Replies)
Discussion started by: Remi
4 Replies
Login or Register to Ask a Question