Executing multiple child scripts - failing


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Executing multiple child scripts - failing
# 1  
Old 12-08-2016
Executing multiple child scripts - failing

Hi Folks -

Happy Thursday!

I have a need where I have Parent/Control script that calls multiple child scripts. The problem is, after the first child script is executed, it fails to move to the next script. I assume it's due to my script exit?

For instance, in batch to return to the parent process, you exit with the following command:

Code:
exit /b <insertexitcodehere>

Is there something simlar in shell?

Here is my code:

Code:
source /u01/app/Hyperion_Batch/Scripts/Shell/_env.sh

#::-- Set Script Name --::
_SN=${0##*/}

echo "Script Name: $_SN"
echo "Script Name without EXT: ${_SN%%.sh*}"

#::-- Set Path Variables --::
_MAINPATH=/u01/app/Hyperion_Batch/
_LOGPATH=Logs/
_ERRORPATH=Errors/

#::-- Set Log & Error subdirectory pertaining to specific process --::

_PLOGPATH=LCM_Logs/
_PERRORPATH=LCM_Errors/

#::-- Set Date and Time Variable --::
_DAY=$(date +%d)
_MONTH=$(date +%m)
_YEAR=$(date +%Y)
_DATESTAMP=${_YEAR}${_MONTH}${_DAY}
_HOUR=$(date +%H)
_MINUTE=$(date +%M)
_SECOND=$(date +%S)
_TIME=${_HOUR}${_MINUTE}
_DATETIMESTAMP=${_DATESTAMP}_${_TIME}

#::-- Establish Log and Error File Directories --::
_ARC_LF=${_MAINPATH}${_LOGPATH}${_PLOGPATH}${_YEAR}_${_MONTH}${_DAY}
_ARC_EF=${_MAINPATH}${_ERRORPATH}${_PERRORPATH}${_YEAR}_${_MONTH}${_DAY}
    mkdir -p ${_ARC_LF}
    mkdir -p ${_ARC_EF}

#::-- Prepare File Name Format --::    
_FN=${_TIME}_${_SN%%.sh*}

#::-- Establish standard out and standard error --:: 
_LF=${_ARC_LF}/${_FN}.log
_EF=${_ARC_EF}/${_FN}.err

#::-- Establish LCM Specifics --::

_EPM_SYSTEM_BIN=/u01/app/Oracle/Middleware/user_projects/epmsystem1/bin/
_IMPORTEXPORT_DIR=/u01/app/Oracle/Middleware/user_projects/epmsystem1/import_export/TVeriRep_Automation_Base/
_LCM_DIR=ESB-TVerRep


exec 2>${_EF} > ${_LF}

#:: Begin Script Processing --::
echo ----------------------------------------------------------
echo "Add $LCM_USER & ${LCM_PSWD} to Export XML ..."
echo ----------------------------------------------------------

sed "s/name=\"\" password=\"\"/name=\"${LCM_USER}\" password=\"${LCM_PSWD}\"/" ${_IMPORTEXPORT_DIR}Export.xml > ${_IMPORTEXPORT_DIR}Export1.xml
rm ${_IMPORTEXPORT_DIR}Export.xml
mv ${_IMPORTEXPORT_DIR}Export1.xml ${_IMPORTEXPORT_DIR}Export.xml


echo ---------------------------------------------------------                                                                                                    
echo "Execute ${_LCM_DIR} Life Cycle Management Backup"                                         
echo ---------------------------------------------------------

sh ${_EPM_SYSTEM_BIN}Utility.sh ${_IMPORTEXPORT_DIR}Export.xml

if [ $? -eq 0 ]
then
  echo ---------------------------------------------------------
  echo "${_LCM_DIR} Life Cycle Management Backup Successful"                           
  echo ---------------------------------------------------------
  #::-- If empty, delete YYYY_MMDD error file subdirectory --::
  trap "[ -s ${_EF} ] || rm -f ${_EF} ] && rmdir ${_ARC_EF}" EXIT 0
  
else
  echo ---------------------------------------------------------
  echo "${_LCM_DIR} Life Cycle Management Backup Unsuccessful"                      
  echo ---------------------------------------------------------
  fi
  exit 1

Thanks!
# 2  
Old 12-08-2016
You lost me. I can't see your script running several other scripts - just the one
Code:
sh ${_EPM_SYSTEM_BIN}Utility.sh ${_IMPORTEXPORT_DIR}Export.xml

So - where is the problem?

Two comments on above script:
- putting a trap command AFTER all other commands doesn't guarantee it to be executed if need be.
- that exit 1 will be executed in each and every case independent of the script's result.
# 3  
Old 12-08-2016
Hi Rudi-

Thank you for the note. I'm sorry I wasn't clear.

I have a parent script that calls multiple child scripts and they are setup in the same format as above. The only difference is the directory variable.

My thoughts were my exits were messed up and thus not letting the scrip proceed to the next one.

I was under the impression if return code 0 it would execute the trap command and then exit with a 0 as indicated by EXIT 0 at the end of the trap line.

Thats wrong? Can you explain? Thank you!
# 4  
Old 12-08-2016
trap sets a trap for the entire script and is valid ONLY after it was set - so set it pretty soon. And, please adhere not only to its syntax but to its logics as well - EXIT 0 specifies the sigspec twice, c.f. man bash.
As already said, your script will exit 1 unconditionally - no further scripts will be executed.
# 5  
Old 12-08-2016
Interesting okay. So how would you change the exit portion of the script to exit with 0 unless an error?

looks like I've set all my scripts up this way, darnit.
# 6  
Old 12-08-2016
Put the exit 1 into the else branch. Note though, that no other scripts may be executed if one fails, then.
# 7  
Old 12-08-2016
+1 @RudiC!

When i write complex processing scripts where all sorts of things could go wrong i usually do it this way:

First, a list of commands that have to be executed (in case everything works perfectly). Let us say the list is:

Code:
cmd1 -a -b
cmd2 /bla/foo/bar
cmd3

Then i write the script like this:

Code:
if ! cmd1 -a -b ; then
     echo "Error executing cmd1 -a -b" >2&
     exit 3
fi

if ! cmd2 /bla/foo/bar ; then
     echo "Error executing cmd2 /bla/foo/bar" >2&
     exit 2
fi

if ! cmd3 ; then
     echo "Error executing cmd3"  >2&
     exit 1
fi

exit 0

Notice that the script will exit with a different error code depending on which command the script fails. Also notice that convention in UNIX is that a RC of 0 means "success" and everything else means varying reasons of failure. This is why the fi-construct (usually) works: a command succeeding in what it is suppsed to do will return 0 and therefore if ! cmd... will evaluate to false whereas a command not succeeding will return non-0 and if ! cmd... will return true triggering the then..fi.

I hope this helps.

bakunin
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Executing multiple scripts using if condition

I have an if condition. If that condition is true then one script will be run and after that I need to check another condition based on the output value of first script. i tried like below : cd lock if ; then rm exitup if ; then kb_shutdown kb_startup if ; then rm exitup if ;... (3 Replies)
Discussion started by: charanarjun
3 Replies

2. Shell Programming and Scripting

Opening Child Shell & Executing a script in the same context

Hi, Is the below possible (SHELL = tcsh)? -- I want to write an 'alias' something like this - alias set_my_work "setenv SOME_VAR;tcsh -i;source work_script.cshrc" The intention is to run this alias and enter a child shell, at the same time ensuring that the work_script.cshrc is source-ed.... (0 Replies)
Discussion started by: mishra.a.c
0 Replies

3. Solaris

ksh scripts failing with cannot execute error

Hi, All the scripts placed in /home/bin had 755 permissions. Sometimes scripts are failing with cannot execute errors. Let me describe a simple scenario. MasterScript.sh had 755 permissions. It is success most of the times. But, sometimes failing with cannot execute error. Really... (1 Reply)
Discussion started by: sureng
1 Replies

4. Shell Programming and Scripting

Script to read input and output files and child scripts

I have a directory where i have *.sas; *.pl;*.sh and *.c scripts I need to find out what are the child scripts and input output files for each script: say I have a shell script which calls a perl script and a sas script: In my first line I want I a) the parent script name; b) the... (1 Reply)
Discussion started by: ramky79
1 Replies

5. Shell Programming and Scripting

Executing all scripts in /DIR except one

First i need to find all scripts directly under /DIR that end with ".sh" extension except "noallow.sh". That can be done with: find /DIR -maxdepth 1 -name "*.sh"|grep -v "noallow.sh" Now i want to run all the files output from the previous command. The following code: for filename in... (6 Replies)
Discussion started by: proactiveaditya
6 Replies

6. Shell Programming and Scripting

Strange SIGINT propagation between Parent/Child sh scripts

Good day, I am trying to add signal handling capabilities to some of my scripts. Unfortunately, I am having some difficulty with the manner in which signals are propagated between parent/child processes. Consider the following example: I have the following "parent" script: #!/usr/bin/sh... (5 Replies)
Discussion started by: danie.ludick
5 Replies

7. Shell Programming and Scripting

multiple child scripts running in backgroud, how to use grep on the parent?

Hi I have a shell script A which calls another 10 shell scripts which run in background. How do i make the parent script wait for the child scripts complete, or in other words, i must be able to do a grep of parent script to find out if the child scripts are still running. My Code: ... (5 Replies)
Discussion started by: albertashish
5 Replies

8. Programming

parent not waiting until child complete executing another program through execl()

Hi, I am calling a program that greps and returns 72536 bytes of data on STDOUT, say about 7000 lines of data on STDOUT. I use pipe from the program am calling the above program. Naturally, I execute the above program (through execl() ) throught the child process and try to read the... (4 Replies)
Discussion started by: vvaidyan
4 Replies

9. UNIX for Advanced & Expert Users

executing commands in child shell

I have to execute some commands after executing one command ( cleartool setview Tagname) Problem is that I write commands in script like this. echo "test1" cleartool setview tagname echo "test2" copy file1 file2 echo "test3" but when I execute script. Output --------- test1 If I... (1 Reply)
Discussion started by: udaykishore
1 Replies

10. Shell Programming and Scripting

Error trapping in parent/child scripts

Greets all. I'm using Slackware 12.0 with the bash shell. Calling my scripts with /bin/sh... I'm building gnome-2.18.3 and I have all my build scripts ready and working but I'm calling them from a parent script which executes each child/build script in a certain order (for loop). I have "set... (6 Replies)
Discussion started by: madpenguin
6 Replies
Login or Register to Ask a Question