유한하지 않은 스크립트


0

목록에서 Linux 서버의 일부 구성을 확인하기 위해 스크립트를 입력했습니다. 목록에 너무 많은 서버가 있으므로 아래 목록에서 10을 10으로 나눕니다.

...
...
for ((i=0; i <= $serverCounter; i+=15))
do
    if [ $i -ge $serverCounter ]
    then
            exit
    else
            echo $i
            Kontrol $list &
            ((first+=15))
            ((last+=15))
    fi
done
...
...

그러나이 상황에서 나는이 루프를 빠져 나갈 수 없다. 나가기 위해 조건을 추가했음을 알 수 있지만 작동하지 않습니다 (이유를 모르겠습니다).

"& amp;"에서 포기하지 않고이 루프를 종료하려면 어떻게해야합니까? EOL에서 (Kontrol function line)


5
시험 $i -ge $serverCounter for 루프에있는 것과 중복됩니다 (경우에만 catch합니다). $i -eq $serverCounter ). 작성된 코드는 여전히 N 개의 병렬 인스턴스를 시작합니다. Kontrol 여기서 N은이다. serverCounter/15따라서 이러한 모든 인스턴스가 결국 시스템에 과부하가 걸리고 루프를 계속 진행하는 데 필요한 CPU가 충분하지 않을 수 있습니다. Kontrol의 K 인스턴스가 동시에 실행되지 않도록 더 복잡한 것을 작성해야 할 수도 있습니다.
xenoid

1
루프는 일정한 시간만큼 실행됩니다. 나는 serverCounter보다 크거나 같을 때 존재할 것이기 때문에 serverCounter보다 크지 않을 것입니다.
Ramhound

실제로는 달리거나 마무리하는 데 문제가 없습니다. ps -ef에서 프로세스를 볼 수 없으므로 스크립트를 끝낼 수는 있지만 마지막 제어 후 bash 화면으로 넘어갈 수는 없습니다. 커서가 깜박입니다. 문제는 "& amp;"입니다. 방향 전환 나는 그렇게 생각한다.
Gefolge

예 @ Ramhound 나는 그것을 알고 있지만 나는이 문제 이후에 그 행을 이미 추가했다. 그렇습니다. 진술을한다면 진실을 입력 할 수는 없지만, 어쨌든 조건이 충족되기 전에 루프를 종료 할 수 없었습니다.
Gefolge

@Gefolge - 루프를 중단 시키거나 계속하는 추가 조건이없는 한 종료 조건은 루프 반복마다 한 번만 평가됩니다.
Ramhound
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.