Error Using an if Loop Within a While Loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Error Using an if Loop Within a While Loop
# 1  
Old 06-02-2010
Error Error Using an if Loop Within a While Loop

Hello All,
I am having a problem with an “if loop” within a “while loop” in my Korn Shell program. The basic concept of the program is that it searches for the existence of a series of load files in a load directory, and once it finds one of these files, it begins the following process:
· Creates a status configuration file in a specified directory.
· Performs a prompt less ssh of the file to a load status directory in another database.
· Initializing a Korn Shell program based on the name file to create a db2 table and to load that table with information contained in the file.
· Deletes the loaded file from the load directory
· Initializing a “ssh” to remove the previously transferred file from the load status directory in the other database.
This process is repeated until all of the designated files have been processed. In order to automate this process I used a “while loop”, a series of “if loops”, an “until loop”, and two arrays-one containing the name and location path for the for the files that are expected to be found in the load directory and one containing the name and location path of the Korn Shell programs that will create the required tables and that will load these files into these tables.
The issue that I am having is that I am receiving the following error as it relates to one of my “if loops”:
0403-057 Syntax error at line 166: `fi' is not expected.
From examining the code, it seems that the syntax is correct (a “fi” to close every “if loop”). Any help that you give me in solving this problem will be appreciated. The code is as follows:

Code:
  +130  #initializing counter
  +131  
  +132  i=0
  +133  
  +134  #looping through loadfile array
  +135  
  +136  while [[ $tableloadcnt -le ${#loadfile[*]} ]] ; do
  +137          if [[ -a ${loadfile[i]} ]] ; then
  +138              echo "${loadfile[i]}"
  +139              echo "$i"
  +140              echo "$tableloadcnt"
  +141              print "$(date) : $fcntcdm .del file waiting to be loaded on DDWTST0. "
  +142              echo "$(date): Creating the status cofiguration file to be transfered to $LOAD_STATUS_DIR on DDW0."
  +143              touch $STAT_CONFIGI_DIR_DDWTST0/$FTPINI_DDW0
  +144              RC=$?
  +145              if [[ $RC -ne 0 ]] ; then
  +146                 print "$(date) : An error occured during the rename processs: Error code $RC"
  +147                 exit $RC
  +148              else
  +149                 echo "$(date): $STAT_CONFIGI_DIR_DDWTST0/$FTPINI_DDW0 has been cretated. "
  +150                 echo "$(date "+%H:%M:%S") - Initializing promptless transfer of status configuration file to $FTPHOST_DDW0"
  +151                 scp -p $STAT_CONFIGI_DIR_DDWTST0/$FTPINI_DDW0 $FTPHOST_DDW0:$LOAD_STATUS_DIR/
  +152                 echo "$(date "+%H:%M:%S") : $FTPINI_DDW0 has been tranferred to $LOAD_STATUS_DIR on $FTPHOST_DDW0"
  +153              fi
  +154              ${loadfile[i]}
  +155               RC=$?
  +156                  if [[ $RC -ne 0 ]] ; then
  +157                     print "$(date) : An error occured during the execution of ${loadfile[i]} : Error code $RC "
  +158                     exit $RC
  +159                  else
  +160                     print "$(date) : ${loadfile[i]} has been successfully executed : Return Code $RC "
  +161                     ((tableloadcnt+=1)
  +162                     echo "$(date) : The number of tables created and load is : $tableloadcnt"
  +163                     rm -f ${loadfile[i]}
  +164                     ssh $FTPHOST_DDW0 "rm -f $LOAD_STATUS_DIR/$FTPINI_DDW0"
  +165                  fi
  +166           else
  +167             until [[ -a ${loadfile[i]} ]] ; do
  +168                  ((direcnt+=1))
  +169                   print "$(date) : the mount directory is empty : $direcnt loop count."
  +170                   sleep 10
  +171             done
  +172           fi
  +173  ((i+=1))
  +174  done

# 2  
Old 06-02-2010
I think this might be the reason:
Code:
  +161                     ((tableloadcnt+=1))

# 3  
Old 06-03-2010
Looping Through An Array

Scrutinizer,

Thank you for the quick response. You suggestion did eliminate the error that I was getting. However, now my program is not looping through the array. It is stuck [0] element of the array. For some reason, the increment of "i" before the end of my "while loop" is not being performed. Do you have any suggestions?

Thanks,
# 4  
Old 06-03-2010
add an echo at the end and before the "done" and see whether the increment is happening or not

Code:
 
+173  ((i+=1))
echo $i
+174  done

# 5  
Old 06-03-2010
Perhaps the loadfile is not present and the script gets stuck in this segment?
Code:
 +167             until [[ -a ${loadfile[i]} ]] ; do
  +168                  ((direcnt+=1))
  +169                   print "$(date) : the mount directory is empty : $direcnt loop count."
  +170                   sleep 10
  +171             done

This wait loop will be run until the load file is present, but the load file will never get executed seeing as $i will immediately be incremented once present.

Also, you seem to be using two counters $i and $tableloadcnt. You might want to have a look at that. For instance tableloadcnt never gets initialized...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Write a while loop inside for loop?

I'm taking a unix class and need to countdown to 0 from whatever number the user inputs. I know how to do this with a while or until loop but using the for loop is throwing me off.... I know I can use an if-then statement in my for loop but can I include a while loop in my for loop? (3 Replies)
Discussion started by: xxhieixx
3 Replies

2. Shell Programming and Scripting

awk loop using array:wish to store array values from loop for use outside loop

Here's my code: awk -F '' 'NR==FNR { if (/time/ && $5>10) A=$2" "$3":"$4":"($5-01) else if (/time/ && $5<01) A=$2" "$3":"$4-01":"(59-$5) else if (/time/ && $5<=10) A=$2" "$3":"$4":0"($5-01) else if (/close/) { B=0 n1=n2; ... (2 Replies)
Discussion started by: klane
2 Replies

3. Shell Programming and Scripting

Reset while loop to loop same file multiple times

Hi, I want to read file multiple times. Right now i am using while loop but that is not working. ex. While read line do while read line2 do echo stmt1 #processing some data based on data., done < file2.txt done < file1.txt # This will have 10... (4 Replies)
Discussion started by: tmalik79
4 Replies

4. Shell Programming and Scripting

Array Variable being Assigned Values in Loop, But Gone when Loop Completes???

Hello All, Maybe I'm Missing something here but I have NOOO idea what the heck is going on with this....? I have a Variable that contains a PATTERN of what I'm considering "Illegal Characters". So what I'm doing is looping through a string containing some of these "Illegal Characters". Now... (5 Replies)
Discussion started by: mrm5102
5 Replies

5. Shell Programming and Scripting

My for loop decides to become an infinite loop?

Hi, I was debating if I should put this in the dummies or scripts section, I apologize in advance if I chose poorly. Fairly new to Unix and BASH scripting but I thought I made it fairly well given my limited understanding. However, the output indicates that it's looping and I'm ending up with a... (5 Replies)
Discussion started by: gotreef
5 Replies

6. Shell Programming and Scripting

BASH loop inside a loop question

Hi all Sorry for the basic question, but i am writing a shell script to get around a slightly flaky binary that ships with one of our servers. This particular utility randomly generates the correct information and could work first time or may work on the 12th or 100th attempt etc !.... (4 Replies)
Discussion started by: rethink
4 Replies

7. Shell Programming and Scripting

Null Handling in Until loop. . .loop won't stop

Hi Im running this script, which is supposed to find the max value build some tables and then stop running once all the tables are built. Thing is , it keeps assigning a null value to $h and then $g is null so it keep building tables i.e. testupdateNUL. How can I stop this? Here is what I have: ... (4 Replies)
Discussion started by: brandono66
4 Replies

8. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

9. Shell Programming and Scripting

Is there a better way I could have run this loop. (For loop with two variables)

Sorry for such a dreadful title, but I'm not sure how to be more descriptive. I'm hoping some of the more gurutastic out there can take a look at a solution I came up with to a problem, and advice if there are better ways to have gone about it. To make a long story short around 20K pieces of... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

10. Shell Programming and Scripting

how to get the similar function in while loop or for loop

Dear all How to write the shell script for the following statement: (C programming) for (i=0;i<30;i++) { if i=1 continue *skip this number (To do function here....) ... } similar statement in while loop.... I wrote the script in sh... (3 Replies)
Discussion started by: trynew
3 Replies
Login or Register to Ask a Question