실패한 경우 Bash 중첩

실패한 경우 Bash 중첩

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
}

관련 정보