2개의 연속 명령을 다시 시도하기 위해 10번 반복하는 while 루프를 실행하려고 합니다.
원래;
retries=10
while ((retries > 0)); do
if ! command; then
if ! other_command; then
echo "Failed to start service - retrying ${retries}"
else
echo "Started service successfully"
break
fi
fi
((retries --))
if ((retries == 0 )); then
echo "service failed to start!"
fi
done
그러나 원하는 결과를 얻기 위해 올바르게 중첩할 수 없는 것 같습니다. 즉, 하나의 명령을 시도하고 실패하면 두 번째 명령을 시도하십시오. 이 두 명령을 순서대로 10번 시도해 보세요. 언제든지 두 명령 중 하나가 성공하면 중단
답변1
중첩된 if가 필요하지 않으므로 break
이를 방지하는 데 도움이 됩니다. 기본적으로 설명하신 대로입니다.
#! /bin/bash
retries=10
while ((retries)) ; do
if command1 ; then
break
elif command2 ; then
break
fi
((--retries))
done
if ((!retries)) ; then
echo 'Service failed to start!' >&2
fi
다음과 같이 정의된 두 명령을 사용하여 테스트합니다.
command1 () {
r=$((RANDOM%10))
if ((r)) ; then
return 1
else
return 0
fi
}