LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   syntax error near unexpected token `else' (https://www.linuxquestions.org/questions/programming-9/syntax-error-near-unexpected-token-%60else-4175477539/)

spkraja3 09-18-2013 12:27 AM

syntax error near unexpected token `else'
 
Hi Everyone,
Please let me know what is missing in this Script.


do_precheck()
{
lock_user;
lockuser=$?;export lockuser; echo "Lockuser Return Code is :- $lockuser " > /tmp/ReturnCode.log
if [ lockuser -eq 0 ] then
{
kill_session;
killsession=$?;export killsession ;echo " Kill Session Return Code is :- $killsession" >> /tmp/ReturnCode.log
if [ killsession -eq 0 ] then
{
do_delete_before_import;
deletebeforeimport=$?;export deletebeforeimport ;echo " Delete Before Import return Code is :-$deletebeforeimport" >> /tmp/ReturnCode.log
if [ deletebeforeimport -eq 0 ] then
{
do_unzip_before_import ;
unzip=$?;export unzip;echo " Unzip Operation Return Code is :- $unzip" >> /tmp/ReturnCode.log
if [unzip -eq 0 ] then
{
generate_drop_user;
dropuser=$?; export dropuser;echo " Drop User Operation Return Code is :- $dropuser " >> /tmp/ReturnCode.log
if [dropuser -eq 0 ] then
{
create_blankuser;
blankuser=$?;export blankuser; echo " Create Blank User User Operation Return Code is :- $blankuser " >> /tmp/ReturnCode.log
if [blankuser -eq 0 ] then
{
echo "Blank User Creation Successful "
}
else
echo " Create Blank User Operation Failed " > /tmp/status.log
exit
}
fi
else
echo " Drop user Failed " > /tmp/status.log
}
fi
else
echo "Unzip Operation Failed " > /tmp/status.log
}
fi
else
echo "deletebeforeimport Steps Failed " > /tmp/status.log
exit
}
fi
else
echo "Killing the Session of User Failed " > /tmp/status.log
exit
}
fi
else
echo "Locking the USER Failed " > /tmp/status.log
exit
}
fi


Error :-
DataPumpExport.ksh: line 173: syntax error near unexpected token `else'
DataPumpExport.ksh: line 173: ` else

colucix 09-18-2013 12:46 AM

Code:

if [ lockuser -eq 0 ] then
should be
Code:

if [ lockuser -eq 0 ]; then
or
Code:

if [ lockuser -eq 0 ]
then

either with a semi-colon before "then" or in a new line.

pan64 09-18-2013 12:55 AM

probably: if [ "$lockuser" -eq 0 ]; then
( space after [, use $ and " )
but it should be fixed several times

spkraja3 09-18-2013 01:16 AM

Thanks for the Response colucix / pan64,
After Changing

do_precheck()
{
lock_user;
lockuser=$?;export lockuser; echo "Lockuser Return Code is :- $lockuser " > /tmp/ReturnCode.log
if [ lockuser -eq 0 ]; then
{
kill_session;
killsession=$?;export killsession ;echo " Kill Session Return Code is :- $killsession" >> /tmp/ReturnCode.log
if [ killsession -eq 0 ]; then
{
do_delete_before_import;
deletebeforeimport=$?;export deletebeforeimport ;echo " Delete Before Import return Code is :-$deletebeforeimport" >> /tmp/ReturnCode.log
if [ deletebeforeimport -eq 0 ]; then
{
do_unzip_before_import ;
unzip=$?;export unzip;echo " Unzip Operation Return Code is :- $unzip" >> /tmp/ReturnCode.log
if [unzip -eq 0 ]; then
{
generate_drop_user;
dropuser=$?; export dropuser;echo " Drop User Operation Return Code is :- $dropuser " >> /tmp/ReturnCode.log
if [dropuser -eq 0 ]; then
{
create_blankuser;
blankuser=$?;export blankuser; echo " Create Blank User User Operation Return Code is :- $blankuser " >> /tmp/ReturnCode.log
if [blankuser -eq 0 ]; then
{
echo "Blank User Creation Successful "
}
elif
echo " Create Blank User Operation Failed " > /tmp/status.log
exit
}
fi
else
echo " Drop user Failed " > /tmp/status.log
}
fi
else
echo "Unzip Operation Failed " > /tmp/status.log
}
fi
else
echo "deletebeforeimport Steps Failed " > /tmp/status.log
exit
}
fi
else
echo "Killing the Session of User Failed " > /tmp/status.log
exit
}
fi
else
echo "Locking the USER Failed " > /tmp/status.log
exit
}
fi

Error:-

DataPumpExport_test.ksh: line 174: syntax error near unexpected token `}'
DataPumpExport_test.ksh: line 174: ` }'

pan64 09-18-2013 01:19 AM

please use [code]here comes your script[/code] to keep formatting.

You need to check the pairs of { and }

druuna 09-18-2013 01:46 AM

@spkraja3: Why the need for all the curly brackets? They are needed for function declaration and looking at the posted code I see only one function that's declared.
Code:

do_precheck() {
  # lock user part
  lock_user;
  lockuser=$?;export lockuser; echo "Lockuser Return Code is :- $lockuser " > /tmp/ReturnCode.log
  if [ lockuser -eq 0 ]; then
    # kill session part
    kill_session;
    killsession=$?;export killsession ;echo " Kill Session Return Code is :- $killsession" >> /tmp/ReturnCode.log
    if [ killsession -eq 0 ]; then
      # do_delete_before_import part
      do_delete_before_import;
      deletebeforeimport=$?;export deletebeforeimport ;echo " Delete Before Import return Code is :-$deletebeforeimport" >> /tmp/ReturnCode.log
      if [ deletebeforeimport -eq 0 ]; then
        .
        .
        .
      fi
    fi
  fi
}

If readability is an issue then use comments or blank lines to separate the sections. This link might help with your scripting style/readability: Scripting with style

spkraja3 09-18-2013 02:00 AM

Hi,
This is my full script

#!/usr/bin/ksh
#--------------------------------------------------------------------------------------------------------------------
#Script:DataPumpExport.ksh
#Author:
#Date : 31-Jul-2013
#Purpose: This script exports a Schema export using expdp and refreshes the Schema using the Latest Backup from Production
#--------------------------------------------------------------------------------------------------------------------

host_name=`hostname`
#MAIL_TO=
vschemas=$1
MAIL_TO=deepak.punjabi@sungard.com
BIN_DIR=/export/home/oracle/admin/KEOMSDB/scripts;export BIN_DIR
. /export/home/oracle/varenvKEOMSDB.sh
SID=`echo $SID|tr 'a-z' 'A-Z'`
drpusersql=/tmp/dropuser_`date "+Date=%d-%m-%y;Time=%T"`.sql;export drpusersql;
drpuserslog=/tmp/dropuser_`date "+Date=%d-%m-%y;Time=%T"`.log;export drpuserslog;
createusersql=/export/home/oracle/admin/KEOMSDB/scripts/createuser.sql;export createusersql
createuserlog=/tmp/dropuser_`date "+Date=%d-%m-%y;Time=%T"`.log;export createuserlog;
get_export_dir_path()
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 0 echo off feed off verify off lines 150
select DIRECTORY_PATH from dba_directories where DIRECTORY_NAME='WEEKLY_EXPORT';
EOFF
}
do_export()
{
edisplay=`date "+Date=%d-%m-%y;Time=%T"`
echo "Exported Started at: $edisplay"
echo "Database Name : $ORACLE_SID"
epost_fix=`date "+%Y%m%d%H%M%S"`;export epost_fix;
edir_path=`get_export_dir_path`
echo "Dumpfile directory: $edir_path"
edumpfile=expdp_SAFE_${ORACLE_SID}_${epost_fix}_%U.dmp
ejobname=expdp_SAFE_${ORACLE_SID}_${epost_fix}
elogfile=expdp_SAFE_${ORACLE_SID}_${epost_fix}.log
expdp \"/ as sysdba\" schemas=$vschemas job_name=${ejobname} directory=WEEKLY_EXPORT DUMPFILE=${edumpfile} FILESIZE=20G logfile=${elogfile}
cd $dir_path
error_count=`egrep "ORA-|EXP-" $elogfile|grep -v grep |wc -l`
if [ ${error_count} -gt 0 ]; then
rm -f "*${epost_fix}*.dmp"
df -k >>${elogfile}
# ${BIN_DIR}/SendMail.ksh -s "${NE_REGION}:${SID}: Full datapump export (FAILURE)" -b ${logfile} -e "${MAIL_TO}"
exit
fi

set -x
for filex in *${epost_fix}*.dmp
do
if [ -f $filex ]; then
gzip -c $filex > $filex.gz
ret_code=$?
if [ $ret_code -ne 0 ]; then ##Delete Zip files if Zip is not Successful
rm -f *${epost_fix}*.gz
df -h >>${elogfile}
echo " Zip of DumpFiles is Not Successful " >>${elogfile}
exit
fi
echo "Safe Export and Gip of Dumpfiles for OMS Schema Completed Successfully" >>${elogfile}
exit
fi
done
}
do_export
get_import_dir_path()
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 0 echo off feed off verify off lines 150
select DIRECTORY_PATH from dba_directories where DIRECTORY_NAME='WEEKLY_IMPORT';
EOFF
}
lock_user() ## Function To Create a Dynamic Script in /tmp to lock the users to be refreshed
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 0 echo off feed off verify off lines 150
spool /tmp/lock_user.sql
select 'alter user '||username||' account lock ;' from dba_users where username in ('$vschemas');
set pages 1000 lines 120 feed on echo on verify on
spool /tmp/lock_user.log
@/tmp/lock_user.sql
spool off
EOFF
}
kill_session()
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 0 echo off feed off verify off lines 150
spool /tmp/kill_session.sql
select '!kill -9 '||p.spid||chr(10)||'alter system kill session '''||s.sid||','||s.serial#||''' immediate;'from v\$session s,v\$process p where s.USERNAME in ('$vschemas') and s.username is not null and s.paddr=p.addr and s.status in ('INACTIVE','ACTIVE');
spool off
set pages 1000 lines 120 feed on echo on verify on
spool /tmp/kill_session.log
@/tmp/kill_session.sql
spool off
EOFF
}
do_delete_before_import()
{

idir_path=`get_import_dir_path`
idisplay=`date "+Date=%d-%m-%y;Time=%T"`
echo "Dumpfiles and Logfiles Deleted on : $idisplay">>${idir_path}/deleted_dumpfile.log
echo "***************************************************************">>${idir_path}/deleted_dumpfile.log
find ${idir_path} -type f -name "*.dmp" -print >>${idir_path}/deleted_dumpfile.log
find ${idir_path} -type f -name "*.dmp" -exec rm {} \;
#exit
}
do_delete_before_import
do_unzip_before_import()
{
idir_path=`get_import_dir_path`
idisplay=`date "+Date=%d-%m-%y;Time=%T"`
ipost_fix_search=`date "+%Y%m%d"`;
echo " Zip Dumpfiles Used for Refresh : $post_fix_search">>$dir_path/dumpfile_used_forrefresh.log
find $idir_path -type f \( -name "*$ipost_fix_search*.gz" \) -print >>$idir_path/dumpfile_used_forrefresh.log
find $idir_path -type f \( -name "*$ipost_fix_search*.gz" \) -exec gunzip {} \;
idumpfiles=`ls *${ipost_fix_search}.dmp|paste -sd ","`
export idumpfiles
}
generate_drop_user()
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 0 echo off feed off verify off lines 150
spool ${drpusersql}
select 'drop user '||username||' cascade;' from dba_users where USERNAME in ('TEST');
spool off
set pages 1000 lines 120 feed on echo on verify on
spool ${drpuserslog}
@${drpusersql}
spool off
EOFF
}
create_blankuser()
{
sqlplus -s "/ as sysdba"<<EOFF
set pages 1000 lines 120 feed on echo on verify on;
spool ${createuserlog}
@${createusersql}
spool off
EOFF
}
do_precheck()
{
lock_user;
lockuser=$?;export lockuser; echo "Lockuser Return Code is :- $lockuser " > /tmp/ReturnCode.log
if [ "$lockuser" -eq 0 ]; then
kill_session;
killsession=$?;export killsession ;echo " Kill Session Return Code is :- $killsession" >> /tmp/ReturnCode.log
if [ "$killsession" -eq 0 ]; then
do_delete_before_import;
deletebeforeimport=$?;export deletebeforeimport ;echo " Delete Before Import return Code is :-$deletebeforeimport" >> /tmp/ReturnCode.log
if [ "$deletebeforeimport" -eq 0 ]; then
do_unzip_before_import;
unzip=$?;export unzip;echo " Unzip Operation Return Code is :- $unzip" >> /tmp/ReturnCode.log
if [ "$unzip" -eq 0 ]; then
generate_drop_user;
dropuser=$?; export dropuser;echo " Drop User Operation Return Code is :- $dropuser " >> /tmp/ReturnCode.log
if [ "$dropuser" -eq 0 ]; then
create_blankuser;
blankuser=$?;export blankuser; echo " Create Blank User User Operation Return Code is :- $blankuser " >> /tmp/ReturnCode.log
if [ "$blankuser" -eq 0 ]; then
echo "Blank User Creation Successful "
fi
else
echo " Create Blank User Operation Failed " > /tmp/status.log
exit
fi
else
echo " Drop user Failed " > /tmp/status.log
exit
fi
else
echo "Unzip Operation Failed " > /tmp/status.log
exit
fi
else
echo "deletebeforeimport Steps Failed " > /tmp/status.log
exit
fi
else
echo "Killing the Session of User Failed " > /tmp/status.log
exit
fi
else
echo "Locking the USER Failed " > /tmp/status.log
exit
}


do_import()
{

ipost_fix=`date "+%Y%m%d%H%M%S"`;
idir_path=`get_import_dir_path`
ijobname=impdp_${ORACLE_SID}_${ipost_fix}
ilogfile=impdp_${ORACLE_SID}_${ipost_fix}.log

## lock_user; -- Lock the User
## kill_session; -- Kill the Session
## do_delete_before_import; -- Delete the Earlier Unwanted Dumpfiles .
## do_unzip_before_import; -- Unzip the Dumpfile for Refresh
## generate_drop_user; -- Generates Drop User sql file in /tmp and Drops the Required User.
## create_blankuser; -- Creates Blank User.Hardcoded with /export/home/oracle/admin/KEOMSDB/scripts/createuser.sql

do_precheck();
precheck=$?
if [precheck -eq 0 ]; then
{
impdp \"/ as sysdba\" schemas=$vschemas job_name=${impjobname} directory=$impdir DUMPFILE=${dmpfilesforimport} FILESIZE=20G logfile=${implogfile}
cd $dir_path
error_count=`egrep "ORA-|EXP-" $implogfile|grep -v grep |wc -l`
if [ ${error_count} -gt 0 ]; then
{
df -k >>${implogfile}
mail -s " Import of ${vschemas} has Errors.Please check the attached Logfile " < ${implogfile}
exit
}
else
{
df -k >>${implogfile}
mail -s " Import of ${vschemas} has Completed Successful. Please check the attached Logfile " < ${implogfile}
exit
}
fi
}
else
{
mail -s " Import of ${vschemas} has Not been Started.Some of the Prechecks Failed." < /tmp/status.log
exit
}
fi

error :-
DataPumpExport_test.ksh: line 185: syntax error near unexpected token `else'
DataPumpExport_test.ksh: line 185: `else'


Thanks for all your help.

druuna 09-18-2013 02:18 AM

@spkraja3: You really need to put [code] ... [/code] tags around your code when posting here (which was already pointed out to you by pan64).

druuna 09-18-2013 02:22 AM

@spkraja3: It looks like your if - then - else - fi combo's aren't complete.

The else on line 185 doesn't belong to any previous if. I also don't see a closing fi (assuming the else does belong to a missing if).

pan64 09-18-2013 02:28 AM

for better readability you should avoid such embedded ifs. Usually you need only invert those conditions and you will be able to create a straightforward implementation.
Code:

if <condition1> then
  something1
  exit or return

# no need to do "else" branch
if <condition2> then
  something2
  exit or return

...


spkraja3 09-18-2013 03:23 AM

Thanks for all your help saved my day...

pan64 09-18-2013 03:28 AM

glad to help you. If you really want to say thanks just press yes


All times are GMT -5. The time now is 02:23 PM.