다음과 같은 "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
피복재
xargs
with는-L
한 번에 10줄을 읽고sh -c
명령에 전달합니다. 첫 번째 매개변수는 프로그램 이름으로 사용되며 더미 이름을 입력합니다sh
. 그러면 이 10개 라인을sh
"$@"로 사용할 수 있으며 원하는 것은 무엇이든 할 수 있습니다. 여기서는 그냥 인쇄해 보겠습니다. 그런 다음sleep
10초 동안 기다립니다. 그 후xargs
다음 10개 부분이 전달되고 test_file의 모든 거짓말이 소진될 때까지 루프가 반복됩니다.