why isn't the exit status true?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting why isn't the exit status true?
# 1  
Old 04-04-2007
why isn't the exit status true?

the code:

do
[ -d ${mk_backup_dir[$i]} ] || mkdir -p ${mk_backup_dir[$i]}
[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -${mk_backup_dir[$i]}" && exit
done

echo "INFO: Backup directories created"


the result:

mkdir: "/cm/uat_releases/riab/uat/2345": Permission denied
ERROR: release backup directory creation failed - /cm/uat_releases/riab/uat/2345
No such file or directory

INFO: Backup directories created


isn't the exit status of the first command on the 3rd line 'true', so therefore the script will exit '&& exit'? but it doesn't, it carries on and displays 'Backup directories created'.

why?
# 2  
Old 04-04-2007
have you echoed $? to see what is returned?
Code:
[ -d ${mk_backup_dir[$i]} ] || mkdir -p ${mk_backup_dir[$i]}
echo $?


You could also use debugging
Code:
#!/usr/bin/ksh
{
set -x 
do
[ -d ${mk_backup_dir[$i]} ] || mkdir -p ${mk_backup_dir[$i]}
[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -${mk_backup_dir[$i]}" && exit
done

set +x
} >> outputlog 2>&1


Last edited by OFFSIHR; 04-04-2007 at 08:46 AM..
# 3  
Old 04-04-2007
Quote:
Originally Posted by OFFSIHR
have you echoed $? to see what is returned?
Code:
[ -d ${mk_backup_dir[$i]} ] || mkdir -p ${mk_backup_dir[$i]}
echo $?


You could also use debugging
Code:
#!/usr/bin/ksh
{
set -x 
do
[ -d ${mk_backup_dir[$i]} ] || mkdir -p ${mk_backup_dir[$i]}
[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -${mk_backup_dir[$i]}" && exit
done

set +x
} >> outputlog 2>&1


$? = 2. which is not zero. therefore '&& echo "Error:....' gets displayed and then the exit should follow.
# 4  
Old 04-04-2007
mmmmm you're right the exit should follow
I've just tested it using this
Code:
#!/usr/bin/ksh
{
set -x
arg=0
while [[ $arg -le 1 ]]
do
[ -d /cm/uat_releases/riab/uat/2345 ] || mkdir -p /cm/uat_releases/riab/uat/2345
[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345" && exit
(( arg +=1 ))
done

echo "INFO: Backup directories created"
set +x
}>> ouptput 2>&1

It DOES work and exits WITHOUT displaying
Code:
INFO: Backup directories created

my debugging info was
Code:
 arg=0
+ [ -d /cm/uat_releases/riab/uat/2345 ]
+ mkdir -p /cm/uat_releases/riab/uat/2345
mkdir: cannot create directory `/cm': Permission denied
+ [ 1 -ne 0 ]
+ echo ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345
ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345
+ exit

btw my machine details are Linux fhinux 2.6.5-7.191-default #1 Tue Jun 28 14:58:56 UTC 2005 i686 i686 i386 GNU/Linux

and i'm using korn
# 5  
Old 04-04-2007
Quote:
Originally Posted by OFFSIHR
mmmmm you're right the exit should follow
I've just tested it using this
Code:
#!/usr/bin/ksh
{
set -x
arg=0
while [[ $arg -le 1 ]]
do
[ -d /cm/uat_releases/riab/uat/2345 ] || mkdir -p /cm/uat_releases/riab/uat/2345
[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345" && exit
(( arg +=1 ))
done

echo "INFO: Backup directories created"
set +x
}>> ouptput 2>&1

It DOES work and exits WITHOUT displaying
Code:
INFO: Backup directories created

my debugging info was
Code:
 arg=0
+ [ -d /cm/uat_releases/riab/uat/2345 ]
+ mkdir -p /cm/uat_releases/riab/uat/2345
mkdir: cannot create directory `/cm': Permission denied
+ [ 1 -ne 0 ]
+ echo ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345
ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345
+ exit

btw my machine details are Linux fhinux 2.6.5-7.191-default #1 Tue Jun 28 14:58:56 UTC 2005 i686 i686 i386 GNU/Linux

and i'm using korn
i got it to work. it's my fault.

in the script, i'm using a function called 'display_message' instead of 'echo'. i omitted this from my post and replaced it with 'echo' because i couldn't be bothered to explain the function.

Quote:
function Display_Message
{
echo "$*" | tee -ai $LOGFILE
}
$LOGFILE isn't setup properly yet, so i was actually getting an error before '&& exit' was reached. somehow - not sure how though - this was causing the '&& exit' to be ignored.

thanks offsihr, because it was from running your version of the script that helped me realise my mistake.
# 6  
Old 04-04-2007
you're welcome.
sometimes it's easier when someone else does a cut down.
I'm guessing short circuit evaluation meant the whole expression wasn't evaluated

http://en.wikipedia.org/wiki/Minimal_evaluation

[ $? -ne 0 ] && echo "ERROR: release backup directory creation failed -/cm/uat_releases/riab/uat/2345" && exit
TRUE---------------------->FALSE------------------------------------------> no more is evaluated

as && needs all to be true
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Exit status in the script

Hi all, I am trying to use a script (a.sh) which is calling another script(b.sh). And I want to use the exit code(set by me) of b.sh in a.sh. I am using this in b.sh #!/bin/sh <-- code --> if ; then exit 0 else exit 1 fiBut... (2 Replies)
Discussion started by: Raj999
2 Replies

2. Shell Programming and Scripting

How to get script to wait until status is true before continuing?

I'm extremely new to shell scripting so I apologize for the crudeness of my descriptions. I am editing a script that will write files (e.g. Job0_A.com, Job1_A.com, etc.) and then run them through a program called gaussian (computational chemistry program). The script will then take the output files... (10 Replies)
Discussion started by: butson
10 Replies

3. Shell Programming and Scripting

Want to get the exit status

Hi All, I am trying to create a zip file with all the txt files(these are in large number) in the current directory. I am able to do this operation sucessfully. After this i want to get the status of the tar command executed and do accordingly. When i am trying with the below code, the status... (3 Replies)
Discussion started by: paddu
3 Replies

4. Shell Programming and Scripting

exit status from the script is always 0

Hi , I have a bash script , which does the network configuration. Messages from this script are dumped on console as well as stored in a log file . This script is invoked from a C code using system call . The script returns different exit code , to indicate different error cases. The... (1 Reply)
Discussion started by: abhirai
1 Replies

5. Shell Programming and Scripting

Exit Status

I have a shell script (#!/bin/sh) that interacts with Appworx and Banner Admin. In my script I want to check the exit status of awrun before continuing. awrun can run for 10 seconds or it can run for over a minute. So my question is, will it go through my if statement before awrun may even be... (2 Replies)
Discussion started by: smkremer
2 Replies

6. Shell Programming and Scripting

Exit status

I'm preparing for exam and one of exams is to write own test command... I wonder if in unix is a command which just returns exit code you specify.. I know I can easily write a function like this: exStatus() { return $1 } -> my question is rather theoretical thank you! (9 Replies)
Discussion started by: MartyIX
9 Replies

7. Shell Programming and Scripting

How to get the exit status

Hi all, I'm running a program which return 1 upon success. But when encounters problem shell return 's '1' . How to differentiate between them the shell return value and script return value. Ex. function fn return '1' if executed successfully and '0' if failed. But when if shell encounters... (1 Reply)
Discussion started by: yhacks
1 Replies

8. Shell Programming and Scripting

how to exit a while true loop

Hi guys, I'm new to unix but loving it!! BUT this is driving me nuts as i can't work out the best way to do it. I have a while true loop that i use to monitor something. For my own reasons in ths script i have disabled the CTRL C using the trap command. But i want to put in a option to exit... (5 Replies)
Discussion started by: Noob e
5 Replies

9. Shell Programming and Scripting

Checking Exit Status

I hope one of you smart people out there can help me with what seems like a real simple questing but I can't quite figure out. In a script I am doing a cmp on two files. I am trying to check the exit status with an if statement but can't seem to figure out the syntax. If the exit status is 1 I... (4 Replies)
Discussion started by: PrimeRibAndADew
4 Replies

10. Shell Programming and Scripting

exit status

i downloaded a text file from metalab.unc.edu called sh.txt and in this reference manual it refers to shell scripting exit status .. at the end of one of the examples that author gave an exit status of 127.. to what does a 127 exit status refer too and what is its purpose in the code. moxxx68 (1 Reply)
Discussion started by: moxxx68
1 Replies
Login or Register to Ask a Question