done' unexpected and do' unmatched


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting done' unexpected and do' unmatched
# 1  
Old 02-02-2009
done' unexpected and do' unmatched

Good morning,

I have been teaching myself shell scripting and seem to be stuck here. I am sure I am just blind and not seeing it so I thought maybe some fresh eyes would help. With the script below I keep getting....
"syntax error at line 248 : `done' unexpected"

I am not seeing why this would be unexpected since there is a do statement. In fact if I comment it out I then get this.....
"syntax error at line 180 : `do' unmatched"

Seems I can not win either way...
Could somebody please show me what I am missing here?

Thank you in advance.

Code:
#!/bin/ksh
. /lcl/apps/Tivoli/netcool/etc/env_omni_sit
EIF_HOME=/lcl/apps/Tivoli/eif;export EIF_HOME


ps -ef | grep ora_pmon | grep -v grep | awk '{print $NF}' | awk -F_ '{print $NF}' > $OMNIHOME/bin/pmonfile.dat
set -A pmon_array
dbfile_name='pmonfile.dat'
i=0
host=`hostname`
while read dbname
do
	pmon_array[i]=${dbname}
	i=`expr ${i} + 1`
done < $OMNIHOME/bin/${dbfile_name}
i=0
 

ps -ef | grep nco_p_syslog | grep -v grep | awk '{print $NF}' | awk -F. '{print $1}' > $OMNIHOME/bin/syslogfile.dat
set -A syslog_array
syslogfile_name='syslogfile.dat'
k=0
while read syslogname
do
	syslog_array[k]=${syslogname}
	k=`expr ${k} + 1`
done < $OMNIHOME/bin/${syslogfile_name}
k=0


if [ ${#pmon_array[*]} > 0 ]; then
    while [ ${i} -lt ${#pmon_array[*]} ]
    do
	x=${pmon_array[i]}
	dbmatch='no'


if [ -e $OMNIHOME/probes/solaris2/syslog.$x.props ]; then
	if [ ${#syslog_array[*]} = 0 ]; then
           $OMNIHOME/probes/nco_p_syslog -manager $x.syslog -propsfile $OMNIHOME/probes/solaris2/syslog.$x.props &
	else
            k=0  
	    while [ ${k} -lt ${#syslog_array[*]} ]
	    do
		if [ ${pmon_array[i]} == ${syslog_array[k]} ]; then
			dbmatch='yes'
		fi
		k=`expr ${k} + 1`
	    done
	    if [ $dbmatch = 'no' ]; then
		$OMNIHOME/probes/nco_p_syslog -manager $x.syslog -propsfile $OMNIHOME/probes/solaris2/syslog.$x.props &
	    fi
	fi
        i=`expr ${i} + 1`
      else


       $EIF_HOME/bin/solaris2/postzmsg -f $EIF_HOME/eif.conf -r CRITICAL -m "Unable to start the $x probe because the syslog.$x.props file does not exist on server $host" OnCallGroup="INFR_Apps" ISOC_Instructions="Please contact INFR_APPS on-call as properties file for a syslog database probe on the server needs to be created" SyslogPropsFileCheck SysCleanup
	i=`expr ${i} + 1`
      fi
    done
fi


ps -ef | grep nco_p_syslog | grep -v grep | awk '{print $NF}' | awk -F. '{print $1}' > $OMNIHOME/bin/syslogfile.dat
set -A syslog_array2
syslogfile_name='syslogfile.dat'
k=0


while read syslogname
do
        syslog_array2[k]=${syslogname}
        k=`expr ${k} + 1`
done < $OMNIHOME/bin/${syslogfile_name}
k=0
i=0


if [ ${#syslog_array2[*]} > 0 ]; then
	while [ ${i} -lt ${#syslog_array2[*]} ]
	do
		x=${syslog_array2[i]}
		dbmatch='no'

        
		if [ ${#pmon_array[*]} = 0 ]; then
			ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
		else
			k=0
			while [ ${k} -lt ${#pmon_array[*]} ]
			do
				if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
					dbmatch='yes'
				fi
				k=`expr ${k} + 1`
			done
			if [ $dbmatch = 'no' ]; then
		                
        				sleep 60 
		       

ps -ef | grep ora_pmon | grep -v grep | awk '{print $NF}' | awk -F_ '{print $NF}' > $OMNIHOME/bin/pmonfile.dat
set -A pmon_array
dbfile_name='pmonfile.dat'
l=0
host=`hostname`
while read dbname
do
        pmon_array[l]=${dbname}
        l=`expr ${l} + 1`
done < $OMNIHOME/bin/${dbfile_name}
k=0
                        while [ ${k} -lt ${#pmon_array[*]} ]
                        do
                                if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
                                        dbmatch='yes'
                                fi
                                k=`expr ${k} + 1`
                        done
                        if [ $dbmatch = 'no' ]; then
        
		        ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}'  | xargs kill
			 fi
                fi
                i=`expr ${i} + 1`
        done
fi

# 2  
Old 02-02-2009
I deleted a bunch of lines from the script. If you look at what's left you can see that you're missing a "fi".

Also, that test [ ${#syslog_array2[*]} > 0 ] is going to redirect its null output to a file named 0.


Code:
if [ ${#syslog_array2[*]} > 0 ]; then
        while [ ${i} -lt ${#syslog_array2[*]} ]
        do
                x=${syslog_array2[i]}
                dbmatch='no'


                if [ ${#pmon_array[*]} = 0 ]; then
                        ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
                else
                        k=0
                        while [ ${k} -lt ${#pmon_array[*]} ]
                        do
                                if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
                                        dbmatch='yes'
                                fi
                                k=`expr ${k} + 1`
                        done
                        if [ $dbmatch = 'no' ]; then

                                        sleep 60

                fi
                i=`expr ${i} + 1`
        done
fi

# 3  
Old 02-02-2009
Hhhhhmmmm I must be blind. I am not seeing it? Smilie
# 4  
Old 02-02-2009
where's the matching 'fi' for this:
Code:
                        if [ $dbmatch = 'no' ]; then

                                        sleep 60

# 5  
Old 02-02-2009
That is where I thought you might be talking about and I tried this....

Code:
 ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}'  | xargs kill
                        fi
                fi
                i=`expr ${i} + 1`
        done
fi

But it returns with....
syntax error at line 260 : `done' unexpected


I would think it should look like this....
Code:
if [ ${#syslog_array2[*]} > 0 ]; then
	while [ ${i} -lt ${#syslog_array2[*]} ]
	do
		x=${syslog_array2[i]}
		dbmatch='no'

        
		if [ ${#pmon_array[*]} = 0 ]; then
			ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
		else
			k=0
			while [ ${k} -lt ${#pmon_array[*]} ]
			do
				if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
					dbmatch='yes'
				fi
				k=`expr ${k} + 1`
			done
			if [ $dbmatch = 'no' ]; then
		                
        				sleep 60 
		       

ps -ef | grep ora_pmon | grep -v grep | awk '{print $NF}' | awk -F_ '{print $NF}' > $OMNIHOME/bin/pmonfile.dat
set -A pmon_array
dbfile_name='pmonfile.dat'
l=0
host=`hostname`
while read dbname
do
        pmon_array[l]=${dbname}
        l=`expr ${l} + 1`
done < $OMNIHOME/bin/${dbfile_name}
k=0
                        while [ ${k} -lt ${#pmon_array[*]} ]
                        do
                                if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
                                        dbmatch='yes'
                                fi
                                k=`expr ${k} + 1`
                        done
                        if [ $dbmatch = 'no' ]; then
        
		        ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}'  | xargs kill
		    fi
                fi
                i=`expr ${i} + 1`
        done
fi


Last edited by LRoberts; 02-02-2009 at 11:28 AM..
# 6  
Old 02-02-2009
I think you are missing the 'fi' right before your last done:

if [ ${#syslog_array2[*]} > 0 ]; then
while [ ${i} -lt ${#syslog_array2[*]} ]
do
x=${syslog_array2[i]}
dbmatch='no'


if [ ${#pmon_array[*]} = 0 ]; then
ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
else
k=0
while [ ${k} -lt ${#pmon_array[*]} ]
do
if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
dbmatch='yes'
fi
k=`expr ${k} + 1`
done

if [ $dbmatch = 'no' ]; then
sleep 60
ps -ef | grep ora_pmon | grep -v grep | awk '{print $NF}' |\
awk -F_ '{print $NF}' > $OMNIHOME/bin/pmonfile.dat
set -A pmon_array
dbfile_name='pmonfile.dat'
l=0
host=`hostname`
while read dbname
do
pmon_array[l]=${dbname}
l=`expr ${l} + 1`
done < $OMNIHOME/bin/${dbfile_name}

k=0

while [ ${k} -lt ${#pmon_array[*]} ]
do
if [ ${syslog_array2[i]} == ${pmon_array[k]} ]; then
dbmatch='yes'
fi
k=`expr ${k} + 1`
done

if [ $dbmatch = 'no' ]; then
ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
fi
fi

i=`expr ${i} + 1`
fi
done
fi
# 7  
Old 02-02-2009
Yeah I had just figured it out when you posted :-)

Thank you for the help though.

ps -ef | grep nco_p_syslog | grep $x | awk '{print $2}' | xargs kill
fi
fi
i=`expr ${i} + 1`
fi
done
fi
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

<< unmatched error

Hi all, I want to call a plsql package that does not return any value. I am using the following script to do so: sqlplus $UserNamePwd <<EOF set head off begin test_pkg.procedure('$DebugFlag'); end; exit EOF if then log_message "procedure failed." exit 1 fi exit $? I... (2 Replies)
Discussion started by: reshma15193
2 Replies

2. Shell Programming and Scripting

If statement with unmatched condition

Hi Gurus, I'm facing some issues with multiple conditions in my if statement. if (!($InputLine=~/^Date/)) && (!($fields eq "VEN")) { Above is the line troughing some syntax errors. I am trying to avoid the below creteria lines to process in my logic. Records starting with... (4 Replies)
Discussion started by: hi.villinda
4 Replies

3. Shell Programming and Scripting

Unmatched <<

Hi, I am running sinple ksh script . From some reason it failed on the following error: ./ogg_status.sh: syntax error at line 16 : `<<' unmatched Please advise. #!/usr/bin/ksh export ORACLE_HOME=/software/oracle/DB10gR2 export LD_LIBRARY_PATH=/software/oracle/DB10gR2/lib:/usr/lib... (4 Replies)
Discussion started by: yoavbe
4 Replies

4. Shell Programming and Scripting

Find Unmatched name from given lists..

i have two lists, list1 => abc jones oracle smith ssm tty list2 => abc jones lmn smith ssm xyz now i want to print only those names which are present in list2 and want to remove names from list2 which presents in list1. so i want OUTPUT => lmn xyz because "abc jones smith ssm" from list2... (5 Replies)
Discussion started by: Killer420
5 Replies

5. Shell Programming and Scripting

Unknown error - ``' unmatched

Hi Guys, I get the error while running below commands. Earlier the command used to execute, but after enclosing them in a function, the error is occuring backupPath=`echo $folderName | sed -e 's,/vobs/dte/itgClient/client/RegressionTestLibPostOHS/,,'` check_event=`cat... (7 Replies)
Discussion started by: ajincoep
7 Replies

6. Shell Programming and Scripting

remove unmatched values

Below is my requirement : unmatched values should get deleted from file1 file1 A-1 B-1 C-1 D-2 E-3 F-4 file2 D C F output C-1 D-2 F-4 (2 Replies)
Discussion started by: lavnayas
2 Replies

7. Shell Programming and Scripting

`for' unmatched

:b:Hi guys, I am getting this error in this piece of code, Any help will be appreciate rypidoc.shl: syntax error at line 79 : `for' unmatched ##Determine if there is a file to process ls 3526*.dat > /dev/null 2>&1 if then exit fi for i in 3526*.dat do # Capture just the file... (2 Replies)
Discussion started by: rechever
2 Replies

8. Shell Programming and Scripting

input file unmatched

Hello guys, I am trying to run an installer through my script. Whatever yes/no or values required during the installation is provided by an answer file (answ.txt) ./install < /var/answ.txt Now, during the installation, it asks for: 1) press return to continue 2) press 3 and hit enter 3)... (1 Reply)
Discussion started by: solaix14
1 Replies

9. Shell Programming and Scripting

else unmatched

I'm getting an else unmatched error on the script below.. For info : SYDB is the database name entered as a param on the command line. #Check the DB name HBDB=`sql $SYDB <<_END_ | grep '^|' | grep -v dbase | sed 's/|//g' | sed 's/ //g' set autocommit on; \p\g set lockmode... (7 Replies)
Discussion started by: b.hamilton
7 Replies

10. Shell Programming and Scripting

Delete unmatched data

Hi, I try to write script to compare 2 data file (list of numbers) which after that I want to delete unmatched numbers and create new file for matched numbers. Can anybody to help me? (5 Replies)
Discussion started by: nazri76
5 Replies
Login or Register to Ask a Question