Else Loop Exiting Early


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Else Loop Exiting Early
# 1  
Old 03-20-2008
Question Else Loop Exiting Early

All,

I'm having a problem w/this function. Specifically, I want to call another function (get_stats) when the process in the else completes (the initial if and the elsif seem to work fine). But what's happening is the get_stats function call is running after the else runs only once, NOT when it completes. I need the else condtion to run until the process completes, THEN call get_stats. Thanks in advance!

check_ul_process()
{
PROGRAM=8675309
LONG_SLEEP=5
SLEEP_TIME=1
UL_PROCESS=$(ps -eaf | grep $PROGRAM | grep -v grep | wc -l)

# if 8675309 isn't running
# and it's not being run by cron,
# re-check

if [ $UL_PROCESS -eq 0 ]
then
while [ $LONG_SLEEP -gt 0 ]
do
if test $STARTED_BY_CRON = "False"
then
echo "\rTime to next check - $LONG_SLEEP\c"
fi
let LONG_SLEEP=LONG_SLEEP-1
sleep $SLEEP_TIME
done

LONG_SLEEP=5
check_ul_process
elsif [ $UL_PROCESS -eq 0 -a $UL_FILE_TYPE = TEMP ]

# if a ul_temp file exists
# and 8675309 is not running,
# log error and exit.

echo $(expr substr $(hostname) 5 2 | tr 'a-z' 'A-Z') "::" $(date +'%D %T') ":: Exiting. A .ul_temp file exists, but the upload process isn't running." >> /ops/log/ulgen_report.log #~/test_report.log
exit
else

# if 8675309 is running
# and it's not being run by cron,
# check it until it completes

while [ $LONG_SLEEP -gt 0 ]
do
if test $STARTED_BY_CRON = "False"
then
echo "\rTime to next check - $LONG_SLEEP\c"
fi
let LONG_SLEEP=LONG_SLEEP-1
sleep $SLEEP_TIME
done

LONG_SLEEP=5
get_stats
exit
fi
}
# 2  
Old 03-20-2008
Question Can you edit/re-submit with code tags?

Being able to see the script indented makes if - then - else and other stuctures easier to read and follow.
# 3  
Old 03-20-2008
RE: Else Loop Exiting Early

Sure (I didn't realize 1) that you could use the code tag and 2) that when posting, it would remove my formatting. Sorry!

Code:
check_ul_process()
{
   PROGRAM=8675309
   LONG_SLEEP=5
   SLEEP_TIME=1
   UL_PROCESS=$(ps -eaf | grep $PROGRAM | grep -v grep | wc -l)

   # if 8675309 isn't running
   # and it's not being run by cron,
   # re-check

   if [ $UL_PROCESS -eq 0 ]
   then
      while [ $LONG_SLEEP -gt 0 ]
      do
         if test $STARTED_BY_CRON = "False"
         then
            echo "\rTime to next check - $LONG_SLEEP\c"
         fi
         let LONG_SLEEP=LONG_SLEEP-1
         sleep $SLEEP_TIME
      done

      LONG_SLEEP=5
      check_ul_process

   elsif [ $UL_PROCESS -eq 0 -a $UL_FILE_TYPE = TEMP ]

   # if a ul_temp file exists
   # and 8675309 is not running,
   # log error and exit.

      echo $(expr substr $(hostname) 5 2 | tr 'a-z' 'A-Z') "::" $(date +'%D %T') ":: Exiting. A .ul_temp file exists, but the upload process isn't running." >> /ops/log/ulgen_report.log #~/test_report.log
      exit

   else

   # if 8675309 is running
   # and it's not being run by cron,
   # check it until it completes

      while [ $LONG_SLEEP -gt 0 ]
      do
         if test $STARTED_BY_CRON = "False"
         then
            echo "\rTime to next check - $LONG_SLEEP\c"
         fi
         let LONG_SLEEP=LONG_SLEEP-1
         sleep $SLEEP_TIME
      done

      LONG_SLEEP=5
      get_stats
      exit
   fi
}

# 4  
Old 03-20-2008
Question A couple of things I noticed

Code:
      check_ul_process

   elsif [ $UL_PROCESS -eq 0 -a $UL_FILE_TYPE = TEMP ]

(1) Your first if condition calls itself - you are nesting a restart of the program.
(2) I do not think this 'elsif' can execute since the simpler first part [$UL_PROCESS -eq 0] would always be caught above.
(3) I cannot say for sure, but your "if then elsif else fi" does not quite feel right. Perhaps it requires "elif then" to make computer logic correct.
# 5  
Old 03-20-2008
RE: Else Loop Exiting Early

Joey,

1) Correct. I want it to run until 8675309 starts. Then on the next check it should go to else.

2) Should I change it to
if [ $UL_FILE_TYPE = TEMP -a $UL_PROCESS -eq 0 ]
That is check the file type first and then check for the process?

3) elif is correct; my misspelling. Thanks for the catch!
# 6  
Old 03-20-2008
Question Clarifications..

1) Correct. I want it to run until 8675309 starts. Then on the next check it should go to else.

2) Should I change it to
if [ $UL_FILE_TYPE = TEMP -a $UL_PROCESS -eq 0 ]
That is check the file type first and then check for the process?

3) elif is correct; my misspelling. Thanks for the catch!

In response:
1) I think this is odd as you will have two occurrences of the program then running. You run, catch the condition, wait, and start again "as a sub-process". This 2nd run may have different results at "if" statements. Assuming it too does not get caught by the first loop - thus creating a third instance of the script running - control would be returned to the first run at the "elsif" line. Perhaps rethink the logic to a "do while" or "do until" set of commands?
2) I was not commenting on the order within the if, more the logic that I do not believe the program could ever find your "elsif" logic true and able to be executed. The first if is true (UL -eq 0) meaning the "elsif" would not be exexcuted. The first is false (UL -eq 0) meaning the "elsif" would be analyzed, but how could it be now true? Unless this is all to catch the sub-process I referred to in (1)?
3) Concur that "elsif" should be "elif". My other point is that an "elif" should then have its own "then". "elif" expects a "then", so does the program skip a bunch of logic until it finds your next "then" occurrence?
# 7  
Old 03-20-2008
Program Flow/Logic Question

Sorry, I'm new to this and am surprised I've made it this far.

Can I do a

Code:
UL_PROCESS=$(ps -eaf | grep $PROGRAM | grep -v grep | wc -l)

while [ $UL_PROCESS -ne 0 ]
do
...
done

or should it be

Code:
while [ `ps -eaf | grep $PROGRAM | grep -v grep | wc -l` -ne 0]
do
...
done

?
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

For loop exiting

Hi , I am processing some files using below shell script the problem for loop exit after processing some files even though it exist.After modifying file.txt and rerunning the script and its running .Any Advise for i in `cat /xx/file.txt |tr -s "," '\n' ` ; do echo $i... (3 Replies)
Discussion started by: mohan705
3 Replies

2. Shell Programming and Scripting

While Loop Exiting

We are trying to design a flow so that an ETL job shouldn't start until the previous job completes. The script we have written is while ; do sleep 2; done The loop however exits even when the process is actually running. Why could this be happening? (12 Replies)
Discussion started by: jerome_rajan
12 Replies

3. Shell Programming and Scripting

Problem exiting a WHILE loop in ksh

Hi I am having a problem exiting a WHILE loop. I am on a Sun server using ksh. I am running a Veritas Cluster Software (High Availablity) command to obtain a group status and grepping the command output for status "G" which means that the filesystem is frozen and therefore not available to... (3 Replies)
Discussion started by: bigbuk
3 Replies

4. Shell Programming and Scripting

Loop Forever Script Strangely Exiting

Hi, I have a really simple script which I want to run forever, inside the loop it runs a C application which if it exits should restart. #!/bin/sh while true do ./SCF scf.conf >> scf.log sleep 2 done For some reason the SCF C application coredumps and the script is exiting.... (3 Replies)
Discussion started by: marvinwright
3 Replies

5. Shell Programming and Scripting

Problem in exiting a loop

Hi my code looks like: if test $STEP -le 10 then . . ls -1d AM*-OUT|while read MYDIR do cd $MYDIR ls |tail -n1| while read MYFILE do . . if test -s $MYFILE then sqlldr .... rc=$? if test $rc -ne 0 (3 Replies)
Discussion started by: anijan
3 Replies

6. UNIX for Advanced & Expert Users

"while read ..." loop exiting after reading only one record

Greeting, The following script completes after reading only one record from the input file that contains many records. I commented out the "ssh" and get what I expect, an echo of all the records in the input.txt file. Is ssh killing the file handle? On the box "uname -a" gives "SunOS... (2 Replies)
Discussion started by: twk
2 Replies

7. UNIX Benchmarks

Early PowerMac G5

Hardware Overview: Model Name: Power Mac G5 Model Identifier: PowerMac7,2 Processor Name: PowerPC 970 (2.2) Processor Speed: 1.8 GHz Number Of CPUs: 2 L2 Cache (per CPU): 512 KB Memory: 1.5 GB Bus Speed: 900 MHz Boot ROM Version:... (0 Replies)
Discussion started by: tnorth
0 Replies

8. Shell Programming and Scripting

exiting from a loop

I wonder if someone could help me here. I am trying to find a way of exiting from a loop but not exiting me from the script for example #!/bin/ksh # ************* FUNCTIONS ****************** function1() { #ping test ping $1 2 > /dev/null if ; then ... (13 Replies)
Discussion started by: hcclnoodles
13 Replies

9. Shell Programming and Scripting

Bash: Exiting while true loop when terminal is not the focus window

I am running an Ubuntu Gutsy laptop with Advanced Compiz fusion options enabled. I am using xdotool to simulate keyboard input in order to rotate through multiple desktops. I am looking for a way to kill a while true loop when the Enter key (or Control+C if it is easier) is pushed when the... (2 Replies)
Discussion started by: acclaypool
2 Replies
Login or Register to Ask a Question