exit
saldrá del shell inmediatamente. Si desea configurar un código de salida para usarlo más tarde, deberá configurar una bandera o guardar el código de salida 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
O incluso
#!/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"
En cuanto a esto...
$./purefs_check.sh -w 50 -c 70 |grep WAR ;echo $?
no funcionará ya que $?
mantendrá el código de salida de grep
. Eso podría usarse para averiguar si había alguna línea de salida que contenía WAR
, pero no creo que eso sea lo que querías.
Si desea ordenar las advertencias de salida primero, deberá recopilar las advertencias y las advertencias críticas en matrices e imprimirlas al final. O simplemente revise los datos dos veces y busque las advertencias primero, y los críticos solo después de eso.
Используйте for-loop
и && break
:
for n in {1..3}; do
docker push $CONTAINER_IMAGE:latest && break;
done
break
выходит из цикла, но запускается только после успешного выполнения docker push
. Если docker push
не работает, он завершится с ошибкой, и цикл продолжится.
Вы также можете использовать:
for n in {1..4}; do
if docker push $CONTAINER_IMAGE:latest
then
break;
fi
done
Оператор then
будет введен только в случае успешного выполнения команды docker.