![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Rules & FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here. |
|
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Bash: Exiting while true loop when terminal is not the focus window | acclaypool | Shell Programming and Scripting | 2 | 02-25-2008 02:02 PM |
| awk completes early | nhatch | Shell Programming and Scripting | 4 | 08-03-2007 06:19 AM |
| Script Not Exiting??? | lesstjm | Shell Programming and Scripting | 1 | 07-11-2007 08:58 AM |
| exiting in c | ruffenator | High Level Programming | 3 | 04-27-2002 11:31 PM |
|
|
LinkBack | Thread Tools | Display Modes |
|
|||
|
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 } |
| Forum Sponsor | ||
|
|
|
|||
|
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
}
|
|
|||
|
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! |
|
||||
|
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? |
|
|||
|
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 Code:
while [ `ps -eaf | grep $PROGRAM | grep -v grep | wc -l` -ne 0] do ... done |
|||
| Google UNIX.COM |