Skrypt, który nie jest skończony

0

Wpisałem skrypt, aby sprawdzić niektóre konfiguracje serwerów Linux z listy. Na liście znajduje się zbyt wiele serwerów, dlatego podzieliłem 10 na 10 z poniższej listy:

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

Ale w tej sytuacji nie mogę wyjść z tej pętli. Możesz zobaczyć, że dodałem warunek if, aby wyjść, ale to nie działa (nie wiem dlaczego).

Jak wyjść z tej pętli bez porzucania „&” w EOL (wiersz funkcji Kontrol)

Gefolge
źródło
5
Twój test $i -ge $serverCounterjest zbędny z testem w pętli for (łapie tylko przypadek, w którym $i -eq $serverCounter). Jak napisano, twój kod będzie nadal uruchamiał N równoległych instancji, Kontrolgdzie N jest serverCounter/15, więc twoim problemem może być to, że wszystkie te instancje ostatecznie przeciążą twój system i nie masz wystarczającej ilości procesora, aby kontynuować pętlę. Być może będziesz musiał napisać coś bardziej złożonego, aby nigdy nie mieć więcej niż K instancji Kontrol działających w tym samym czasie.
ksenoid
1
Twoja pętla będzie działać skończoną liczbę razy. Nigdy nie będę większy od serverCounter, ponieważ będzie istniał, gdy będzie równy lub większy od serverCounter takim, jakim jest.
Ramhound
właściwie nie ma problemu z bieganiem i kończeniem. Nie widzę procesu w ps -ef, więc skrypt może się zakończyć, ale nie mogę wpaść w ekran bash po ostatniej kontroli. tylko kursor miga. Problem polega na przekierowaniu „&”, tak mi się wydaje.
Gefolge
tak @Ramhound Wiem o tym, ale już dodałem tę linię po tym problemie. Więc tak, nie mogę wpisać true jeśli instrukcja if, ale nie mogłem wcześniej wyjść z pętli, jeśli i tak warunek.
Gefolge
@Gefolge - Twój warunek wyjścia jest oceniany tylko raz na iterację pętli, chyba że masz dodatkowy warunek, który przerywa lub kontynuuje pętlę.
Ramhound