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의 모든 거짓말이 소진될 때까지 루프가 반복됩니다.

관련 정보