for 루프를 제어하는 ​​방법은 무엇입니까?

for 루프를 제어하는 ​​방법은 무엇입니까?

다음과 같이 "for 루프"가 있다고 가정해 보겠습니다.

#!/bin/bash
for i in $(cat test_file); do 
echo $i
done

텍스트 파일의 내용은 상위 폴더에 있는 폴더의 이름입니다.

text_file에 10000개의 항목(예: 변수 i)이 포함되어 있는 경우 "for 루프"가 10개의 "에코"마다 10초 동안 휴면하도록 어떻게 알 수 있습니까? 즉, for 루프가 text_file에서 변수 i를 읽을 때 for 루프가 특정 기간마다 실행될 수 있는 변수 수를 어떻게 제어할 수 있습니까? 따라서 출력은 다음과 같습니다.

   Variable #1
   Variable #2
   Variable #3
   .
   .
   .
   .
   sleep 10
    Variable #11
    Variable #12
    Variable #13
   .
   .       .

답변1

다음을 사용하십시오세게 때리다스크립트(매 10번의 "메아리" 사이에 10초씩 잠을 자도록 하세요.):

test.sh스크립트의 테스트 이름입니다.

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

용법:

bash test.sh test_file

while ((++i))- 입력에서 한 줄을 반환 i할 때마다 카운터가 증가합니다.read -r line

if (( "$i" % 10 == 0))- 현재 줄 번호가 i다음으로 나누어지는지 확인합니다 10(실행 흐름이 다음 10줄에 도달한다는 의미).

sleep 10- 스크립트를 10초 동안 일시 중지합니다.

답변2

xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

일하고 있는

  • xargswith는 -L한 번에 10줄을 가져와서 sh -c명령에 전달합니다. 첫 번째 인수는 프로그램 이름으로 사용되며 더미 이름을 배치합니다 sh. 그러면 이 10개 라인을 "$@"로 사용할 수 sh있으며 원하는 것은 무엇이든 할 수 있습니다. 여기서는 그냥 인쇄해 보겠습니다. 그런 다음 sleep10 초 동안. 그 후 xargs다음 10개의 트랜치를 통과해야 하며 이 주기는 test_file의 거짓말이 없어질 때까지 반복됩니다.

관련 정보