I need to depend on few separate executions in a script and don't want to bundle them all in an ugly 'if' statement. I would like to take the exit code '$?' of each execution and add it; at the end, if this value is over a threshold - I would like to execute a command.
Pseudo code:
ALLOWEDERROR=5
run_something
RESULT=$?
..other things..
run_something_else
RESULT=$RESULT + $?
if [ $RESULT -gt ALLOWEDERROR ]
then echo "Too many errors"
fi
Issue: Even though the Internet claims otherwise, bash refuses to treat the RESULT and $? as integer. What is the correct syntax?
Thanks.
Use the
$(( ... ))
construct.Here are some ways to perform an addition in bash or sh:
And some others in bash only:
Anyway, exit status on error is not always 1 and its value does not depend on error level, so in the general case there is not much sense to check a sum of statuses against a threshold.
A quick experiment and dip into bash info says:
since you are adding to the result several times, you can use declare at the start, like this:
which looks much cleaner.
declare -i
says that the variable is integer.Alternatively you can avoid declare and use arithmetic expression brackets:
For how to add numbers in Bash also see:
If you want to use ALLOWEDERROR in your script, preface it with a $, e.g $ALLOWEDERROR.
As mouviciel mentioned collecting sum of return codes looks rather senseless. Probably, you can use array for accumulating non-zero result codes and check against its length. Example of this approach is below: