A opção 2 é apenas uma opção quando você se importa apenas com a diferença entre sucesso e falha. Se você precisar diferenciar entre diferentes status de saída diferentes de zero, a opção 1 será necessária.
some-command arg1 arg2
exit_status=$?
if [[ $exit_status -eq 0 ]]; then
# ...
elif [[ $exit_status -eq 1 ]]; then
# ...
elif [[ $exit status -eq 42 ]]; then
# ...
else
# ...
fi
(Você precisa salvar $?
como exit_status
porque $?
será redefinido pelo primeiro comando [[ ... ]]
; se falhar, o primeiro elif
não testaria o mesmo valor para $?
novamente.)
Bem, não exatamente necessário . Uma terceira opção é usar uma instrução case
, que pode eliminar a necessidade de salvar $?
se você não precisar consultar seu valor novamente.
some-command arg1 arg2
case $? in
0) # ...
;;
1) # ...
;;
42) # ...
;;
*) # ...
;;
esac