getting error as below while executing script in linux.
OS version:
Linux VGP-3GPSDB-LX 3.10.0-514.el7.x86_64 #1 SMP Wed Oct 19 11:24:13 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux
./imxtract.sh: line 395: unexpected EOF while looking for matching ``'
./imxtract.sh: line 402: syntax error: unexpected end of file
below is my script code , please assist to rectify the error.
Thanks in advance.
#!/bin/sh
. $HOME/.oraenv
. $HOME/.fisenv
CPDEVTSDEBUG="/tmp/CPDevts.debug"
CPDCSTADEBUG="/tmp/CPDcsta.debug"
CPDCSTFDEBUG="/tmp/CPDcstf.debug"
DATESTMP="`date '+%Y%m%d%H%M%S'`"
FILEDATE="`date '+%Y%m%d'`"
GPSTMP="/home/amp/tmp/"
WORKPATH="/tmp/"
CPDEVTSSEQ="CPDevts.seq"
CPDCSTASEQ="CPDcsta.seq"
CPDCSTFSEQ="CPDcstf.seq"
orasid="gpsu"
SQLLOGIN="`cat /home/amp/admin/sqlsec`"
pnum=1
pflag=0
# Funtion to display usage message #
#----------------------------------#
usagemsg ()
{
echo "Usage:"
echo "\tERROR!! No parameters are provided or parameters provided are incorrect."
echo ""
echo "\tValid parameters are as below:"
echo "\t\t./imxtract.sh -f {CPDevts|CPDcsta|CPDcstf} <month> <year>"
echo "\t\t./imxtract.sh -f {CPDcsta|CPDcstf} <day> <month> <year>\n"
echo "\t -f = feed type"
echo "\t <day> = day in 2 digits format. This parameter does not apply to feedtype 'CPDevtsf' & 'CPDevtsa'"
echo "\t <month> = month in 2 digits format"
echo "\t <year> = year in 4 digits format"
}
# Function to check the validity of day value #
#---------------------------------------------#
chkday ()
{
dy=$1
mm=$2
yy=$3
if [ $dy -lt 1 ]; then
usagemsg
exit
fi
i=`echo $mm | wc -c`
if [ $i -ne 3 ]; then
mm=`echo $mm | awk '{print "0"$1}'`
fi
case $mm in
01|03|05|07|08|10|12) dd=31
;;
04|06|09|11) dd=30
;;
02) if [ `expr $yy % 4` -eq 0 ]; then
dd=29
else
dd=28
fi
;;
esac
if [ $dy -gt $dd ]; then
echo "Invalid day!!\n"
usagemsg
exit
fi
}
# Function to check the validity of month value #
#-----------------------------------------------#
chkmonth ()
{
mth=$1
if [ $mth -lt 1 ]; then
usagemsg
exit
fi
if [ $mth -gt 12 ]; then
usagemsg
exit
fi
}
# Function to check the validity of year value #
#----------------------------------------------#
chkyear ()
{
yr=$1
if [ $yr -lt 1900 ]; then
echo "Year value is less than 1900!!\n"
usagemsg
exit
fi
if [ $yr -gt 2999 ]; then
echo "Year value is greater than 2999!!\n"
usagemsg
exit
fi
}
# Function to extract data #
#--------------------------#
getdata ()
{
DATAPATH=$1
DEBUGFILE=$2
SEQFILE=$3
SQLCMD=$4
EFFDATE=$5
# Assigning sequence number #
#---------------------------#
if [ -f $DEBUGFILE ]; then
rm $DEBUGFILE
fi
c=`ls $GPSTMP| grep -x $SEQFILE | wc -l`
if [ $c -eq 1 ]; then
lastseqnum=`cat $GPSTMP$SEQFILE`
elif [ $c -gt 1 ]; then
echo "More than 1 sequence file exists at $GPSTMP. Please check with the System Administrator."
exit
elif [ $c -eq 0 ]; then
lastseqnum=0
fi
seqnum=`expr $lastseqnum + 1`
echo $seqnum > $GPSTMP$SEQFILE
cnt=`echo $seqnum | wc -c`
if [ $cnt -lt 6 ]; then
i=`expr 5 - $cnt`
while [ $i -ne -1 ]
do
seqnum=`echo 0$seqnum`
i=`expr $i - 1`
done
elif [ $cnt -gt 6 ]; then
echo "Sequence number to be assigned to file has exceeded 5 digits. Please check with Application Admin." | tee > $DEBUGFILE
echo "To reset the reset the sequence number to zero(0), remove the $GPSTMP$SEQFILE" | tee >> $DEBUGFILE
seqnum=`expr $seqnum - 1`
echo $seqnum > $GPSTMP$SEQFILE
exit
fi
if [ $EFFDATE -ne $FILEDATE ]; then
TIMESTMP="`echo $DATESTMP | cut -c9-14`"
HEADERDATE=$EFFDATE$TIMESTMP
else
HEADERDATE=$DATESTMP
fi
WORKFILE="$DATAPATH""GPS_$FEED"_"$DATESTMP"_"$seqnum"_"$pnum.tmp"
sqlplus "$SQLLOGIN" $SQLCMD $WORKFILE > $DEBUGFILE
# Exception to handle non-existence of working file
ls $WORKFILE > /dev/null 2>&1
if [ $? -ne 0 ]; then
seqnum=`expr $seqnum - 1`
echo $seqnum > $GPSTMP$SEQFILE
echo "$WORKFILE is not created. Please check..." | tee >> $DEBUGFILE
exit
fi
# Exception to handle Oracle sql error
cat $DEBUGFILE | grep ORA- > /dev/null 2>&1
if [ $? -eq 0 ]; then
rm -f $WORKFILE
seqnum=`expr $seqnum - 1`
echo $seqnum > $GPSTMP$SEQFILE
echo "Oracle error is found in $DEBUGFILE. Please check..." | tee >> $DEBUGFILE
exit
fi
# Create .dat file with header and trailer inserted #
#---------------------------------------------------#
DATAFILE="`echo $WORKFILE | sed 's/.tmp$/.DAT/g'"
header="00GPS $FEED$HEADERDATE$seqnum$pnum$pflag"
echo "$header" > $DATAFILE
row="`tail -2 $WORKFILE | sed '/^$/d' | sed 's/rows selected//g' | sed 's/\.$//g' | cut -d' ' -f1`"
sed '$d' $WORKFILE | sed '$d' | sed '/^$/d' >> $DATAFILE #To delete the last line and blank line
reccnt="`echo $row`"
if [ "$reccnt" = "no" ]; then
row=00000000
else
cnt="`echo $row | wc -c`"
if [ $cnt -lt 9 ]; then
i=`expr 8 - $cnt`
while [ $i -ne -1 ]
do
row="`echo 0$row`"
i=`expr $i - 1`
done
fi
fi
trailer="99GPS $row"
echo "$trailer" >> $DATAFILE
rm $WORKFILE
# FTP .dat file to IM-CARGO SAS Server #
# ------------------------------------ #
FTPSFILE="`echo $DATAFILE | cut -d"/" -f6`"
#sh /home/amp/fisbin/imftp.sh $FTPSFILE $DATAPATH
}
############################################
# Main Body #
############################################
# Check the validity of parameters entered #
#------------------------------------------#
if [ $# -eq 0 ]; then
usagemsg
exit
fi
if [ $1 = "-f" ] && [ $# -eq 1 ]; then
usagemsg
exit
fi
if [ $1 != "-f" ]; then
usagemsg
exit
fi
if [ $2 != "CPDevts" ] && [ $2 != "CPDcsta" ] && [ $2 != "CPDcstf" ]; then
usagemsg
exit
fi
if [ $2 = "CPDevts" ] && [ $# -ne 4 ]; then
usagemsg
exit
fi
if [ $2 = "CPDcsta" ] && [ $# -ne 5 ]; then
if [ $# -ne 4 ]; then
usagemsg
exit
fi
fi
if [ $2 = "CPDcstf" ] && [ $# -ne 5 ]; then
if [ $# -ne 4 ]; then
usagemsg
exit
fi
fi
if [ $2 = "CPDevts" ] && [ $# -eq 4 ]; then
chkmonth $3
chkyear $4
fi
if [ $2 = "CPDcsta" ] && [ $# -eq 4 ]; then
chkmonth $3
chkyear $4
fi
if [ $2 = "CPDcstf" ] && [ $# -eq 4 ]; then
chkmonth $3
chkyear $4
fi
if [ $2 = "CPDcsta" ] && [ $# -eq 5 ]; then
chkday $3 $4 $5
chkmonth $4
chkyear $5
fi
if [ $2 = "CPDcstf" ] && [ $# -eq 5 ]; then
chkday $3 $4 $5
chkmonth $4
chkyear $5
fi
FEED=`echo $2 | tr '[a-z]' '[A-Z]'`
case $FEED in
CPDEVTS) mm=$3
yy=$4
i=`echo $mm | wc -c`
if [ $i -ne 3 ]; then
mm=`echo $mm | awk '{print "0"$1}'`
fi
case $mm in
01|03|05|07|08|10|12) dd=31
;;
04|06|09|11) dd=30
;;
02) if [ `expr $yy % 4` -eq 0 ]; then
dd=29
else
dd=28
fi
;;
esac
DATAPATH="/home/amp/fisoutput/FLT_EVENT/"
HEFFDATE=$yy$mm$dd
DEBUGFILE="$CPDEVTSDEBUG"
SEQFILE="$CPDEVTSSEQ"
SQL="@CPDevts.sql $mm $yy"
getdata $DATAPATH $DEBUGFILE $SEQFILE "$SQL" $HEFFDATE
;;
CPDCSTA|CPDCSTF) if [ $# -eq 5 ]; then
dd=$3
mm=$4
yy=$5
dy=$dd
else
dy=1
mm=$3
yy=$4
i=`echo $mm | wc -c`
if [ $i -ne 3 ]; then
mm=`echo $mm | awk '{print "0"$1}'`
fi
case $mm in
01|03|05|07|08|10|12) dd=31
;;
04|06|09|11) dd=30
;;
02) if [ `expr $yy % 4` -eq 0 ]; then
dd=29
else
dd=28
fi
;;
esac
fi
case $mm in
01) mon="JAN"
;;
02) mon="FEB"
;;
03) mon="MAR"
;;
04) mon="APR"
;;
05) mon="MAY"
;;
06) mon="JUN"
;;
07) mon="JUL"
;;
08) mon="AUG"
;;
09) mon="SEP"
;;
10) mon="OCT"
;;
11) mon="NOV"
;;
12) mon="DEC"
;;
esac
while [ $dy -le $dd ]
do
c=`echo $dy | wc -c`
if [ $c -ne 3 ]; then
dy=`echo $dy | awk '{print "0"$1}'`
fi
if [ $FEED = "CPDCSTA" ]; then
DATAPATH="/home/amp/fisoutput/SITA_PRI_MAS/"
DEBUGFILE="$CPDCSTADEBUG"
SEQFILE="$CPDCSTASEQ"
SQL="@CPDcsta.sql $dy-$mon-$yy $dy/$mm/$yy"
else
DATAPATH="/home/amp/fisoutput/SITA_PRI_MSK/"
DEBUGFILE="$CPDCSTFDEBUG"
SEQFILE="$CPDCSTFSEQ"
SQL="@CPDcstf.sql $dy-$mon-$yy $dy/$mm/$yy"
fi
HEFFDATE="$yy$mm$dy"
getdata $DATAPATH $DEBUGFILE $SEQFILE "$SQL" $HEFFDATE
dy=`expr $dy + 1`
done
;;
esac
###################################################################
# End of Main Body #
###################################################################