
다음과 같이 "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의 거짓말이 없어질 때까지 반복됩니다.