시스템이야기2012. 5. 29. 18:19

bash

1. seq 명령

GNU의 coreutils패키지에는 seq명령(리눅스에 기본 설치, FreeBSD는 /usr/ports/sysutils/coreutils 포트를 설치하면 gseq명령으로 설치됨)이 있다. seq는 숫자를 순차적으로 출력해주는 명령이다. 예를 들어 1부터 5까지, 또는 1부터 10까지 2씩 증가하여 출력하고 싶다면 seq사용하면 된다.

$ seq 1 5
1
2
3
4
5
$ seq 1 2 10
1
3
5
7
9

bash 쉘스크립트의 for문에서 seq명령을 사용한 예이다. 1부터 31까지 순차적으로 출력된다.

#!/bin/bash

for i in `seq 1 31`
do
    echo $i
done


2. bash에서 순차적 숫자(sequential numbers)

bash 3.0이상 부터는 loop에 순차적 숫자를 사용할 수 있다. 아래는 seq를 썼을 때와 같은 결과가 나온다.

#!/bin/bash

for i in {1..5}
do
    echo $i
done

[ 결과 ]
1
2
3
4
5

bash 4.0이상 부터는 증가치(increment)를 지정할 수 있다.

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo {1..10..2}
1 3 5 7 9


3. seq명령과 bash 순차적 표현의 각각의 장점

* seq 명령을 사용할 때 장점

1) 실수형으로 증가할 수 있다.

$ seq 1 .1 10
1.0
1.1
1.2
1.3
1.4
1.5
1.6
... 생략 ...

2) 구분문자를 지정할 수 있다. 기본은 줄바꿈

$ seq -s " + " 1 10
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10

* bash에서 순차적 숫자를 쓸 때 장점

1) {01..10} 처럼 지정하면 01 02 03 처럼 앞에 0을 붙여준다. 0001처럼 지정할 수도 있다. (bash 4.0 부터)

$ echo {01..10}
01 02 03 04 05 06 07 08 09 10
$ echo {0001..10}
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010

2) 문자도 순차적으로 출력할 수 있다. {a..z} 나 {A..Z} 처럼

$ echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
$ echo {a..z..2}
a c e g i k m o q s u w y


Posted by 좋은진호

댓글을 달아 주세요

  1. bash의 {..} 기능은 정말 새롭군요.
    내부 명령어이니 seq보다 오버헤드도 적어서 좋겠군요.

    좋은 기능 소개 감사합니다.

    2013.05.21 00:15 신고 [ ADDR : EDIT/ DEL : REPLY ]