Endless Loop

Hi,
I'm pretty new to UNIX shell scripting and need some help. We have an Informatica interface that dumps any files that have errors into a directory. I need to check that directory periodically for any of up to 9 files that might be in it and run a specific process for each file found. The directory could (and hopefully would be) empty.

I've gotten some help from some of the folks here and have worked out some of the initial problems, but it goes into an endless loop and I have to stop it. I'm missing something.

Any help would be greatly appreciated.

Here is the test code without the actual processes:

#!/bin/ksh

ls /home/inform/LeanLogistic/bkp | while read filename
echo $filename
do
echo 'did do statement'

	if [ "$filename" = "CX_ORDER_LOAD_SHIPMENTexport.csv" ]
       then
       /usr/bin/echo "CX_ORDER_LOAD_SHIPMENT file." 
	elif [ "$filename" = "CX_CHARGEexport.csv" ]
	then 
	  /usr/bin/echo "CX_CHARGE file." 
	elif [ "$filename" = "CX_LOAD_HISTORYexport.csv" ]
	then
	  /usr/bin/echo "CX_LOAD_HISTORY file." 
	elif [ "$filename" = "CX_DEDICATED_EQUIPMENTexport.csv" ]
	then
	  /usr/bin/echo "CX_DEDICATED_EQUIPMENT file." 
	elif [ "$filename" = "CX_LOAD_NOTEexport.csv" ]
	then
	  /usr/bin/echo "CX_LOAD_NOTE file."
	elif [ "$filename" = "CX_PRODUCT_INFOexport.csv" ]
	then
	  /usr/bin/echo "CX_PRODUCT_INFO file." 
	elif [ "$filename" = "CX_RATE_CHANGE_REQUESTexport.csv" ]
	then
	  /usr/bin/echo "CX_RATE_CHANGE_REQUEST file."
	elif [ "$filename" = "CX_SERVICE_REQUESTexport.csv" ]
	then
	  /usr/bin/echo "CX_SERVICE_REQUEST file." 
	elif [ "$filename" = "CX_SERVICE_FAILUREexport.csv" ]
	then
	  /usr/bin/echo "CX_SERVICE_FAILURE file." 
	fi
echo 'did if statement'
done

Below is the output it produces when all 9 files are in the directory. It loops through and reads all the files, but then just keeps looping.

CX_CHARGEexport.csv
did do statement
CX_CHARGE file.
did if statement
CX_DEDICATED_EQUIPMENTexport.csv
did do statement
CX_DEDICATED_EQUIPMENT file.
did if statement
CX_LOAD_HISTORYexport.csv
did do statement
CX_LOAD_HISTORY file.
did if statement
CX_LOAD_NOTEexport.csv
did do statement
CX_LOAD_NOTE file.
did if statement
CX_ORDER_LOAD_SHIPMENTexport.csv
did do statement
CX_ORDER_LOAD_SHIPMENT file.
did if statement
CX_PRODUCT_INFOexport.csv
did do statement
CX_PRODUCT_INFO file.
did if statement
CX_RATE_CHANGE_REQUESTexport.csv
did do statement
CX_RATE_CHANGE_REQUEST file.
did if statement
CX_SERVICE_FAILUREexport.csv
did do statement
CX_SERVICE_FAILURE file.
did if statement
CX_SERVICE_REQUESTexport.csv
did do statement
CX_SERVICE_REQUEST file.
did if statement

did do statement
did if statement

did do statement
did if statement

did do statement
did if statement

did do statement
did if statement

did do statement
did if statement

Your

ls /home/inform/LeanLogistic/bkp | while read filename

will read through all files in that directory folder. So, if that commands retrieves more than nine filenames, you will get more than nine results.
Perhaps try

ls /home/inform/LeanLogistic/bkp/CX* | while read filename

to limit the number of found files.

The echo $filename before the do statement causes the while to examine the exit code of the echo, which is always true. You presumably want to move it after the do

Hi era,
Just wanted to thank you for the help on the Endless Loop problem I posted a week or so ago. Your solution:

"The echo $filename before the do statement causes the while to examine the exit code of the echo, which is always true. You presumably want to move it after the do"

SOLVED the problem. Thanks so much.

Jeff R