셸 스크립트 - 프로세스가 완료된 후 종료/완료될 때까지 이전 루프로 돌아갑니다.

셸 스크립트 - 프로세스가 완료된 후 종료/완료될 때까지 이전 루프로 돌아갑니다.

일부 파일 필터링 기능을 자동화하기 위해 bash/셸 스크립트를 작성 중입니다. 지금까지 제가 쓴 내용은 다음과 같습니다. 온라인에서 찾은 스크립트를 기반으로 합니다.

if (( $(ps -ef | grep $service | wc -l) > 0 ))
then
    echo "$service is not done" >> /root/test.txt
else
    (( $(wc -l /root/filter/first.txt) > 0 ))
    if (( $(ps -ef | grep $service | wc -l) < 0 ))
    then
        ./root/filter/filefilter.sh
    else (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
        if (( $(ps -ef | grep awk | wc -l) > 0 ))
        then
            (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
        else
            # here is where I would like it to loop until the filtering is complete
            # then once the final file is > 0 stop/die/done
        fi
    fi
fi

디렉토리에 final.txt가 생성될 때까지 반복하고 싶습니다. 해당 부분을 추가하고 루프 또는 반환 함수의 도움이 필요합니다(작동하는 경우 return을 사용하여 1행으로 돌아가서 최종까지 스크립트 실행을 다시 시작합니다). .txt가 생성된 후 죽습니다/finish/stop)

답변1

코드의 일부 부분을 잘 이해하지 못합니다. 1) filefilter.sh 스크립트가 필터링을 수행합니까? 2) 그렇다면 어떤 상황에서 필터링합니까(예: $service가 존재합니까?) 3) 선택한 서비스 또는 실행 중인 모든 프로세스를 필터링합니까?

루프를 쉽고 명확하게 찾아낼 수 있으므로 들여쓰기는 스크립팅에서 매우 중요합니다.

[귀하의 코드]:

if (( $(ps -ef | grep $service | wc -l) > 0 ))
then
    echo "$service is not done" >> /root/test.txt
else
    (( $(wc -l /root/filter/first.txt) > 0 ))        #There is no condition required for the else-loop

    if (( $(ps -ef | grep $service | wc -l) < 0 ))
    then
            ./root/filter/filefilter.sh

    else
        (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))   #There is no condition required for the else-loop

            if (( $(ps -ef | grep awk | wc -l) > 0 ))  
            then
                    (( $(ls | grep /root/filter/final.txt | wc -l) > 0 ))
            else
                    #You can use the exit command to stop the loop base on the condition you want

        fi
    fi
fi

관련 정보