Those aren't error codes; they're known as "exit status" or "exit condition" codes. The convention is to use 0 to indicate an uneventful exit, usually by ending the script with "exit 0", and higher numbers if the script needs to exit without completing its intended purpose, for example:
if [ ! -d $SRC_PATH ]; then
echo "The source directory was not found at $PWD/$SRC_PATH."
exit 1
fi
Here I'm returning a status 1, which the calling process can potentially respond to. If the calling process is you, sitting at your terminal, you can respond by remembering that you need to run that other shell script that downloads the source files and builds a directory. If it's another script, it can do the same thing by checking the value of the status code. For example, "if [ $? -gt 0 ]; then" would allow you to branch to an error-recovery routine. $? is the default variable used for exit status, but you can also assign one explicitly when you call a script, e.g. "S=`myscript.sh`". You can also get more elaborate with your status checking by using a case statement:
case $S in
0)
echo "Hey, it worked!"
;;
1)
echo "Oh darn. The server was down."
;;
2)
echo "You get the picture..."
;;
esac
On Monday, June 01, 2009, at 02:57PM, "Anthony Adachi" <[log in to unmask]> wrote:
>Hello,
>
>In AppleScript and many other programming languages one can throw
>deliberate errors of a specific kind as well as catch-trap for specific
>errors. I'm having a hard time determining how to do this in bash 3.2
>with it's 'trap' command.
>
>For instance, a very simple example in AppleScript...
>
>try
> error 99
>on error 99
> say "Caught expected error."
>end try
>
>say "doing more tests..."
>
>
>Moreover, I can't figure out whether or not if it's even possible to
>catch for specific thrown errors defined by a scripter in bash. My own
>tests have led to a dead end and I haven't come any better understanding
>from reading the bash info docs, and numerous online and in print
>examples of the 'trap' command.
>
>
>Basically, I wish to...
>
>1. First of all, have scripts throw a specifically, identifiable, unique
>error when a certain known bad state has been encountered that they
>can't handle.
>
>2. Secondly, to able to test for whether scripts are throwing an
>specific error under a certain condition.
>
>
>3. Trap for and catch only that specific error and then keep on going,
>performing further automated tests.
>
>Is this possible in bash?
>
>
>Below is an example which might better illustrate what I've attempted to
>do. It unfortunately, doesn't do what's needed at the moment. i.e.- It
>will catch all errors and exits but not a specific one.
>
>#--- The example below traps all errors but not the specific one.
>
>particular_function()
>{
> current_status="some known bad condition"
> if [ "$current_status" = "some known bad condition" ]; then
> # Encountered some known condition we can't handle so throw specific
>error.
> echo "Encountered a, we knew this would happen, type error."
> exit -99
> fi
>}
>
>test_method_for_expected_error()
>{
> trap 'echo "function threw expected error code as it should."' EXIT
> particular_function
>}
>
>test_method_for_expected_error
>
>echo "Continued passed caught error as desired and continuing further
>tests..."
>
>#--- end of example
>
>
>Thanks,
>
>-Anthony
>
>
|