Pls review this code and suggest if it can be written in a better way

Pls review this code and provide your feedbacks to make it more efficient.I have tried to add to each section.

Code 
###############################################################
#!/bin/ksh
RRSRC=/test
RREP=/test
#Directories
test_dir=/test
#Imp Files
FILENAME=/test/files.txt
# rename the datasets to test1 and test2 ----Is there a better method to rename at RENAME STEP
llll=test1.sas7bdat
mmmm=test2.sas7bdat
set +x
# Sas prg to be executed
pgm_name=from_tytt
rpt_pgm_name=ppppp
export log=$RLOG/${seq_nbr}_${pgm_name}_${year}${emth}.log
export log1=$RLOG/${seq_nbr}_${rpt_pgm_name}_${year}${emth}.log
#
#  read in the ending month as they are used to process the files for that
#  Quarter.
#
touch ${log}
touch ${log1}
echo ${pgm_name}
echo ${rpt_pgm_name}

log_date=`date +%m%d%y`
echo ${log_date}
echo "Starting SAS"

#Variable for 2 digit month calculation
a=0

# Create the directory with the eod date this directory will be purged at the completion of the process
eod=`date +%m%d%y`
archive_dir=/test/"$eod"
mkdir $archive_dir
#Read the files for the quarterie if it for the quarter =1 then  read files for jan feb march
# the files start with 
#'a_d_c'
#'kpp_s' 
#'ax_P_Tl_Gr' 
#'T_P_al_Gd_At' 
#'x_P_Rd'
#'a_P_l_ot_Ng' 
# The FILENAME contains these strings and is used to read only these files 
# the files are in the string_yyyymmdd_hhmmss.txt format so calculate the mth variable
# to get a two digit number
while IFS= read -r LINE
do
Mth=9
COUNT=1
while [ $COUNT -lt 4 ];
do
  if [ $Mth -lt 10 ];  then
     Mth="$a$Mth"
  fi
#  Copy the files tothe temporary archive directory
   cp "$test_dir/$LINE"_"$YEAR$Mth"*.txt $archive_dir/.
  Mth=`expr $Mth - 1`
  COUNT=`expr $COUNT + 1`
done
done < "$FILENAME"

# From the list of files for the quarter
# read each file and create dataset.
# Since each file has different variable so 
# pass the number of variables dynamically
# to the Sas prg.Export the file name(obj) and the number of variable parameter(var2)
ls -1 "$archive_dir|while read obj
  do
    echo "Inside DO $LINE loop"
    export obj
    echo  $obj
if [ "$LINE" = 'a_d_c' ];then var2=var25
   elif [ "$LINE" = 'kpp_s' ];then var2=var11
            elif [ "$LINE" = 'ax_P_Tl_Gr' ];then var2=var7
                 elif [ "$LINE" = 'T_P_al_Gd_At' ];then var2=var7
                     elif [ "$LINE" = 'x_P_Rd' ];then var2=var17
                         elif [ "$LINE" = 'a_P_l_ot_Ng' ];then var2=var7
fi
echo $LINE
export var2
echo $var2
  /sas $RRSRC/$pgm_name.sas -print $RREP/$pgm_name -log $log
  return_code=$?
  if [ $return_code -gt 1 ]
  then
        echo "$pgm_name.sas failed -- return code=$return_code"
        exit $return_code
fi
  done
# For the process we just need to two datasets but we need the latest ones. 
#RENAME STEP
do
  ls -r1 "$archive_dir/a_d_c_????????_??????_??????.????????|sort -t2 +1 -r|head -1|while read obj
  do
    mv $obj $llll
 done
done
do
  ls -r1 "$archive_dir/x_P_Rd_????????_??????_??????.????????|sort -t2 +1 -r|head -1|while read obj
  do
    mv $obj $mmmmm
 done
done
# End of RENAME Step
#  read and process further
 /sas $RRSRC/$rpt_pgm_name.sas -print $RREP/$rpt_pgm_name -log $log1
return_code=$?
  if [ $return_code -gt 1 ]
  then
        echo "$rpt_pgm_name.sas failed -- return code=$return_code"
        exit $return_code
fi
# purge the archive directory
_purge $archive_dir
_purge()
    {
            # there had better be a directory
            if [ ! -d $1 ]; then
     echo $1: No such directory 1>&2
     return
            fi
    }
###############################################

Your do... done statements don't parse.

What is the purpose of the script, please? Not the algorithm or mechanism, but its overall goal.

Thanks it was a good catch. I had moved some code from one part of the script to another which led to this.I am making some changes and will be reposting this code in a short while.

The Objective of the code:

I am trying to process a set of file which follow a naming pattern.The naming pattern is of the king

string_yyyymmdd_hhmmss_YYYYMM.txt

The string is contained in the file used.

I need to process all the files for a quarter using process1 and two out this set using another process. The two are to be selected using the latest yyyymmdd_hhmmss value containe din the file name.

Thanks

I was highly confused by this sentence:

Perhaps you can re-phrase it?

Hi

I have made the chnges to the code and its running now. i have added PROCESS1 and PROCESS2 to indicate what files are to be processed under each PROCESS.I have modified the code so as not to reflect the actual data so there are chances that copy pasting it might not run.Pls review the functionality and suggest if it can be implemented in a better way.

Thanks

Code 
###############################################################
#!/bin/ksh
RRSRC=/test
RREP=/test
#Directories
test_dir=/test
#Imp Files
FILENAME=/test/files.txt
# rename the datasets to test1 and test2 ----Is there a better method to rename at RENAME STEP
llll=test1.sas7bdat
mmmm=test2.sas7bdat
set +x
# Sas prg to be executed
pgm_name=from_tytt
rpt_pgm_name=ppppp
export log=$RLOG/${seq_nbr}_${pgm_name}_${year}${emth}.log
export log1=$RLOG/${seq_nbr}_${rpt_pgm_name}_${year}${emth}.log
#
#  read in the ending month as they are used to process the files for that
#  Quarter.
#
touch ${log}
touch ${log1}
echo ${pgm_name}
echo ${rpt_pgm_name}
log_date=`date +%m%d%y`
echo ${log_date}
echo "Starting SAS"
#Variable for 2 digit month calculation
a=0
# Create the directory with the eod date this directory will be purged at the completion of the process
eod=`date +%m%d%y`
echo $eod
export eod
archive_dir=/test/"$eod"
mkdir $archive_dir
#Read the files for the quarterie if it for the quarter =1 then  read files for jan feb march
# the files start with 
#'a_d_c'
#'kpp_s' 
#'ax_P_Tl_Gr' 
#'T_P_al_Gd_At' 
#'x_P_Rd'
#'a_P_l_ot_Ng' 
# The FILENAME contains these strings and is used to read only these files 
# the files are in the string_yyyymmdd_hhmmss.txt format so calculate the mth variable
# to get a two digit number
while IFS= read -r LINE
do
Mth=9
COUNT=1
while [ $COUNT -lt 4 ];
do
  if [ $Mth -lt 10 ];  then
     Mth="$a$Mth"
  fi
#  Copy the files tothe temporary archive directory
   cp "$test_dir/$LINE"_"$YEAR$Mth"*.txt $archive_dir/.
  Mth=`expr $Mth - 1`
  COUNT=`expr $COUNT + 1`
done
done < "$FILENAME"
# From the list of files for the quarter
# read each file and create dataset.
# Since each file has different variable so 
# pass the number of variables dynamically
# to the Sas prg.Export the file name(obj) and the number of variable parameter(var2)
ls -1 "$archive_dir|while read obj
  do
    LINE=`basename $obj .txt`
    echo $LINE
    export LINE
    echo "Inside DO $LINE loop"
    export obj
    echo  $obj
if [ `nawk -v a="$obj" -v b="a_d_c" 'BEGIN{print match(a,b)}'` -ne 0 ];then var2=var25
   elif [ `nawk -v a="$obj" -v b="kpp_s" 'BEGIN{print match(a,b)}'` -ne 0 ];then var2=var11
            elif [ `nawk -v a="$obj" -v b="ax_P_Tl_Gr" 'BEGIN{print match(a,b)}'` -ne 0 ];then var2=var7
                 elif [ `nawk -v a="$obj" -v b="T_P_al_Gd_At" 'BEGIN{print match(a,b)}'` -ne 0 ];then var2=var7
                     elif [ `nawk -v a="$obj" -v b="x_P_Rd" 'BEGIN{print match(a,b)}'` -ne 0  ];then var2=var17
                         elif [ `nawk -v a="$obj" -v b="a_P_l_ot_Ng" 'BEGIN{print match(a,b)}'` -ne 0  ];then var2=var7
fi
export var2
echo $var2
 
# PROCESS 1 -All files to be processed present in the archive directory
  /sas $RRSRC/$pgm_name.sas -print $RREP/$pgm_name -log $log
  return_code=$?
  if [ $return_code -gt 1 ]
  then
        echo "$pgm_name.sas failed -- return code=$return_code"
        exit $return_code
fi
  done
# For the process we just need to two datasets but we need the latest ones. 
#RENAME STEP
do
  ls -r1 "$archive_dir/a_d_c_????????_??????_??????.????????|sort -t2 +1 -r|head -1|while read obj
  do
    mv $obj $llll
 done
done
do
  ls -r1 "$archive_dir/x_P_Rd_????????_??????_??????.????????|sort -t2 +1 -r|head -1|while read obj
  do
    mv $obj $mmmmm
 done
done
# End of RENAME Step
#  PROCESS 2 read and process further .ONLY THE 
# latest datasets llll=test1.sas7bdat and
#  mmmm=test2.sas7bdat need to processed.

 /sas $RRSRC/$rpt_pgm_name.sas -print $RREP/$rpt_pgm_name -log $log1
return_code=$?
  if [ $return_code -gt 1 ]
  then
        echo "$rpt_pgm_name.sas failed -- return code=$return_code"
        exit $return_code
fi
# purge the archive directory
_purge $archive_dir
_purge()
    {
            # there had better be a directory
            if [ ! -d $1 ]; then
     echo $1: No such directory 1>&2
     return
            fi
    }
###############################################

What's wrong with the code now? Doesn't work? Hard to maintain? Slow?

At first blush, when I see "if [ nawk ... elif [ nawk ..." it really makes me want to convert the whole damn thing to a real scripting language (python, ruby, or perl, in order of my personal preference).
--
Quentin