opposite return status in c shell


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers opposite return status in c shell
# 1  
Old 01-12-2011
opposite return status in c shell

there is something wrong with my system. when I do this:
Code:
diff file1 file1 && echo 1

the output is 1.

but
Code:
diff file1 file2 >/dev/null && echo 1

output nothing

while
Code:
diff file1 file2 >/dev/null || echo 1

shows 1.

the same with "grep" return status. they are both GNU utilities.

What could be so messed up to cause this opposite return status? (the return status was correct has been correct until today.)

Thanks.


Moderator's Comments:
Mod Comment Please use code tags when posting data and code samples!

Last edited by Franklin52; 01-14-2011 at 05:43 AM..
# 2  
Old 01-13-2011
In many systems, including shell script, it does "lazy" evaluation in "if" statements. If the first expression is "true" and there is a logical "and" it will go onto the second. If it is "false" the "and" statement will immediately be false and therefore will not run the second expression. In your example if the "diff" returns "false" it will not run the "echo".
diff file1 file1 is returning "true" and will run the echo. In the second example diff is returning "false" and therefore not running the echo. In the third example diff is returning "false" but the expression is "or" so it will run the echo.
I hope this (rather verbose) answer is helpful....
# 3  
Old 01-13-2011
Hi Citaylor:

I totally understand that part.

But for GNU diff, the return status of "diff file1 file1" should be 0 (no difference found), while "diff file1 file2" should be 1.

Therefore, the "diff file1 file1 && echo 1" should not print out anything. But in our system, it print out 1.

so basically, the return status of diff (or grep) is opposite to typical.

"man diff" shows "An exit status of 0 means no differences were found, 1 means some differences were found, and 2 means trouble."

Does your system behave the same way?

Thanks.
# 4  
Old 01-13-2011
Im afraid that is incorrect. A return code of zero in UNIX land means "true" and one means "false". Try running:
Code:
true ; echo $?
false ; echo $?

This User Gave Thanks to citaylor For This Post:
# 5  
Old 01-13-2011
@citaylor

Yes, shell return status is "opposite of typical". It is a consequence of using a exit status that is limited to a single value between 0 and 255. Indicating why a command fails with multiple and different 0s is a little difficult Smilie, so instead 0 is used to indicate success and non-zero indicates failures.

<imho>I think it would have been better to use two status variables -- something (aka $?) to indicate success or failure and something else ($: perhaps) to indicate WHY it failed. I'll just need to find a WABAC machine and talk to Mr. Thompson, Ritchie, et al.</imho>
This User Gave Thanks to m.d.ludwig For This Post:
# 6  
Old 01-14-2011
Thank you very much for the answers. It makes sense now.

But, does it mean "0" is considered "true" as the return status, but is "false" as a value?

for example:
Code:
set tmp=0;  if ( $tmp ) echo t

will not echo t.

Thanks.

Moderator's Comments:
Mod Comment Please use code tags when posting data and code samples!

Last edited by Franklin52; 01-14-2011 at 05:44 AM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Return value to shell script, depending on status of pl/sql udpate

Hi All, I need to return value to the main shell script, depending on whether the UPDATE command in the embedded pl/sql is successfu or not. #!bin/ksh updateStatus=`sqlplus --conn details-- << EOF DECLARE var_rows NUMBER; BEGIN update table_name set column_name =... (7 Replies)
Discussion started by: rituparna_gupta
7 Replies

2. Shell Programming and Scripting

Return Status

Hi can you explain me, what does variables $@ and $* return and how are they used, if can give me a sample example it could be helpful. Thanks in advance, Regards, Abhishek S. (1 Reply)
Discussion started by: abhisheksunkari
1 Replies

3. UNIX for Advanced & Expert Users

Call parallel sql scripts from shell and return status when both sql are done

Hi Experts: I have a shell script that's kicked off by cron. Inside this shell script, I need to kick off two or more oracle sql scripts to process different groups of tables. And when both sql scripts are done, I will continue in the shell script to do other things like checking processing... (3 Replies)
Discussion started by: huasheng8
3 Replies

4. Shell Programming and Scripting

return status after run the shell script

Hello, I wanted to delete all files which are placed 14 days back. Here is my below script. My script works very well and it deletes all files 14 days back. I wanted to display message incase if the delete script is not successful. The below script returns always successful. But the directory... (6 Replies)
Discussion started by: govindts
6 Replies

5. Shell Programming and Scripting

evaluate return status of a function

Hi all I'm trying to evalute the return status of a function without much success. I've put a very basic example below to explain. check_ok() works fine but when used within an if statement, it always returns true, whether it is true or false. I'm guessing it returns true as the function... (4 Replies)
Discussion started by: tig2810
4 Replies

6. HP-UX

Return of EXIT status ( $? )

I have the question: How return the exit code from then assign : VAR=$(command ) for ex. VAR=$(ls ....) VAREXIT=$? echo $VAREXIT VAREXIT is equal to 0 if the directory exist or not exist. WHI?? if i execute the command direct from line-command , the value of $? is different if... (1 Reply)
Discussion started by: ZINGARO
1 Replies

7. Shell Programming and Scripting

Verify scp return status

Hi all below is a snippet of my perl codesystem ("scp -pq $dest_file $path");How i can i trap the return status? ie if the scp fails how can i know ? (2 Replies)
Discussion started by: new2ss
2 Replies

8. Shell Programming and Scripting

Return status of all previous runs

hi, I set the crontab to execute script A every 5 minutes from 9:00 am to 4:00 pm everyday, now at 12:00am I want to run another script if and only if all the previous runs of script A return OK, can anyone tell me how it could be done? thank you very very much! (4 Replies)
Discussion started by: mpang_
4 Replies

9. Shell Programming and Scripting

return ftp status

Hello, I still have problems when trying to figure out if the status of an ftp was successful. I ftp to different types (nt, vax, unix, etc...) of machines. I am trying to write a universal script that will ftp a file and then check to see if the ftp was successful. I have tried the... (12 Replies)
Discussion started by: blt123
12 Replies

10. Shell Programming and Scripting

Return status...

Hello there! Here is my problem. I hope I can get some help about it. I need to know how can I get the return code of an application in the Unix shell script. The script is like below: PREVIOUS STATEMENT & VARIABLES sqlplus scott/tiger @$sqldir/$sqlscript NEXT STATEMENT (Like... (7 Replies)
Discussion started by: Shaz
7 Replies
Login or Register to Ask a Question