Как зациклиться 3 раза в сценарии bash, если не удается выполнить отправку докера?

exitsaldrá 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.

9
11.07.2019, 09:50
2 ответа

Используйте for-loopи && break:

.
for n in {1..3}; do
    docker push $CONTAINER_IMAGE:latest && break;
done

breakвыходит из цикла, но запускается только после успешного выполнения docker push. Если docker pushне работает, он завершится с ошибкой, и цикл продолжится.

22
27.01.2020, 20:04

Вы также можете использовать:

for n in {1..4}; do
     if docker push $CONTAINER_IMAGE:latest  
     then 
          break;
     fi
done

Оператор thenбудет введен только в случае успешного выполнения команды docker.

5
27.01.2020, 20:04

Теги

Похожие вопросы