while 루프 내부의 조건을 여러 번 확인한 후 명령을 실행하는 방법

while 루프 내부의 조건을 여러 번 확인한 후 명령을 실행하는 방법
switchback(){
  while true 
    do
      players=$(cat $serverpath/$port//count.txt);
      sleep 5;
      if (( $players < 10 )); then
        $(loadpubserveripip)
        break
      fi
    done
}

위 함수에서 다음 단계로 진행하기 전에 조건을 5번 계속 if해야 하는 것처럼 만들려면 어떻게 해야 합니까?true

답변1

5와 같은 카운터 변수를 추가하기만 하면 됩니다. 조건이 true이면 1씩 감소하고, false이면 5로 재설정하고, count=0이면 중단합니다. 코드를 기반으로 한 가장 간단한 대답은 다음과 같습니다.

switchback(){
    count=5
    while true 
    do
      players=$(cat $serverpath/$port//count.txt);
      if (( $players < 10 ));then
        if ! ((--count)); then
          $(loadpubserveripip)
          break
        fi
      else
        count=5
      fi
      sleep 5
    done
}

참고할 몇 가지 사항:

  • sleep 5마지막 루프에서 불필요한 수면을 피하기 위해 루프의 맨 아래 로 옮겼습니다 .
  • "추가 작업"은 루프 앞에서 break루프 뒤로 이동할 수 있습니다. 왜냐하면 루프는 5번째 시간이 $players10보다 작을 때만 중단되기 때문입니다.
  • $(loadpubserveripip)해당 줄로 무엇을 하고 있는지 알기를 바랍니다 . 결과는 loadpubserveripip작동할 수 있는 유효한 쉘 명령이어야 합니다.

관련 정보