exit
sairá do shell , imediatamente. Se você quiser definir um código de saída para ser usado posteriormente, será necessário definir um sinalizador ou salvar o código de saída manualmente.
#!/bin/bash
warns=""
crits=""
for x in ...; do
if warning_condition; then
warns=1 # or keep a count with warns=$((warns + 1))
elif critical_condition; then
crits=1
fi
done
[ "$crits" ] && exit 2
[ "$warns" ] && exit 1
Ou até mesmo
#!/bin/bash
exit_code=0
set_exit_code() {
# save the greatest given exit code
[ "$1" -gt "$exit_code" ] && exit_code=$1
}
for x in ...; do
if warning_condition; then
set_exit_code 1
elif critical_condition; then
set_exit_code 2
fi
done
exit "$exit_code"
Quanto a isso ...
$ ./purefs_check.sh -w 50 -c 70 |grep WAR ;echo $?
não funcionará, pois $?
manterá o código de saída do grep
. Isso poderia ser usado para descobrir se havia alguma linha de saída que contivesse WAR
, mas não acho que é isso que você queria.
Se você quiser classificar os avisos de saída primeiro, precisará coletar os avisos e advertências críticas para os arrays e imprimi-los no final. Ou simplesmente percorra os dados duas vezes e procure primeiro os avisos, e os críticos só depois disso.