seq
seq 명령어는 연속된 숫자를 나열해 주는 명령어로 shell script에서 for 루프 등을 돌기 위한 조건을 만들 때 매우 유용하다.
n까지 나열
1부터 n까지 나열하려면 종료 숫자를 지정해 주면 된다.
$ seq 7
1
2
3
4
5
6
7
시작과 끝 지정
파라미터 2개를 주면 첫 번째는 시작 숫자, 두 번째는 종료 숫자로 처리한다. 아래 예제는 5부터 10까지 숫자를 나열하는 예제이다.
$ seq 5 10
5
6
7
8
9
10
증분 지정
파라미터 2개를 주면 첫 번째는 시작 숫자, 두 번째는 증분, 세 번째는 종료 숫자로 처리한다. 아래 예제는 5부터 10까지 숫자를 5씩 증가시켜 나열한다.
$ seq 1 5 10
1
6
구분자 지정
기본 구분자는 new line이다. 이럴 경우 seq의 결과를 for loop에서 사용하기가 어려워 진다. 이럴 때는 구분자를 지정하는 옵션인 -s
옵션을 사용하여 공백을 구분자로 지정해주면 된다.
$ seq -s " " 1 5 10
1 6
예제
정해진 횟수만큼 명령어 실행
아래 예제는 1부터 20까지 루프를 돌며 echo문을 사용하는 예제이다.
#!/usr/bin/bash
for i in $(seq -s " " 10)
do
echo "${i}"
sleep 1
done
x초마다 명령 실행
해당 예시는 증분을 이용하여 2초마다 명령을 실행하며 30초가 되면 종료한다.
#!/usr/bin/bash
INCR=2
for i in $(seq -s " " 1 ${INCR} 30)
do
echo "${i}";
sleep ${INCR};
done
위와 비슷한 예시로, 172.16.103.132에서 돌아가는 웹 페이지를 n초마다 한 번씩 요청하는 스크립트를 작성해보자. curl에서 요청한 값만 받도록 --silent
요청을 추가한다.
$ for i in $(seq 1 20); do sleep ${i}; echo "${i} - $(curl --silent 172.16.221.155 | grep title)"; done
1 - <title>Welcome to nginx!</title>
2 - <title>Welcome to nginx!</title>
3 - <title>Welcome to nginx!</title>
4 - <title>Welcome to nginx!</title>
5 - <title>Welcome to nginx!</title>
6 - <title>Welcome to nginx!</title>
7 - <title>Welcome to nginx!</title>
8 - <title>Welcome to nginx!</title>
9 - <title>Welcome to nginx!</title>
...