본문 바로가기
Linux/Bash

[Bash] 반복문(for, while 문) 사용법 및 예제

by A6K 2020. 11. 14.

리눅스에서 Bash 스크립트를 작성할 때 '반복문'을 사용하면 편하다. 프로그래밍 언어의 여러 구성 문법중 Bash의 반복문에 대해 정리해보겠다.

Bash에서 반복문은 다음 문법을 따른다.

for 변수 in 범위조건
do
  반복할 작업
done

in 키워드 뒤쪽에 나오는 범위 조건을 반복(iterate)하면서 반복할 작업을 실행한다. 반복할 작업은 dodone 사이에 작성하면 된다.

Bash 반복문 - 기본문법

반복하려는 대상을 공백 문자로 구분되는 리스트 형태로 입력할 수 있다.

for var in 1 2 3 4 5 6 7
do
    echo ${var}
done

이런식으로 입력하면 in 키워드 뒤에 쓴 값을 하나씩 var 변수에 남아서 반복문 바디 부분을 실행한다. 이 명령을 실행하면 다음 결과를 얻게 된다.

만약 in 키워드 뒤쪽을 쌍따옴표로 감싸버리면 전체를 하나의 문자열로 인식해서 "1 2 3 4 5 6 7"을 출력하니 주의해야한다.

Bash 반복문 - 순차값 사용

Java에서 반복문은 순차값으로 가장 많이 사용한다.

for (int i = 0; i < 10; i++) {
    System.out.println("Value : " + i);
}

Bash에서는 우선 괄호를 이용하는 방법이 있다.

for var in {1..10}
do
    echo ${var}
done

혹은 seq 명령을 이용할 수도 있다.

for var in `seq 1 10`;
do
    echo ${var}
done

둘다 1부터 10까지 출력해주는 의미로 사용할 수 있다. 하지만 Bash 3.0 이후에는 괄호를 이용한 방식을 권장하고 있다. seq 명령을 지원하지 않는 플랫폼이 있을 수도 있기 때문이다.

1씩 증가가 아니라 2씩 증가시켜서 홀수 혹은 짝수만 출력하고 싶은 경우가 있다. 이 때는 다음과 같은 문법을 사용하면된다.

for var in {1..10..2}
do
    echo ${var}
done

혹은 seq 명령을 이용할 수도 있다.

for var in `seq 1 2 10`;
do
    echo ${var}
done

괄호를 이용한 반복문에서는 마지막 부분에 증가시키고 싶은 값을 넣어주면된다. seq 명령을 이용하는 경우에는 두 번째 인자가 증가시키고 싶은 값이다.

Bash 반복문 - 배열사용

순차값을 사용하는 경우만큼 배열의 엘리먼트를 순회하는 사용 패턴도 많다. 배열을 이용한 순회는 다음 코드처럼 사용한다.

languages=('C' 'C++' 'JAVA' 'Python')

for language in ${languages[@]};
do
    echo ${language}
done

language\[@\] 부분에서 골뱅이 문자는 * 문자와 동일한 의미다.

Bash 반복문 - 이중괄호

Bash에서 이중괄호는 산술연산을 의미한다. 이중괄호와 반복문을 이용해서 프로그래밍 언어와 유사한 형태로 쓸 수 있다.

for ((i=1; i<=10; i++)); 
do
    echo $i
done

이를 이용해서 무한루프도 작성할 수 있다.

for (( ; ; ))
do
    echo "Hello"
done

무한루프는 [Ctrl] + C 버튼을 눌러 Bash 스크립트를 강제 종료하는 방식으로 빠져나올 수 있다.

Bash의 반복문은 continue, break 구문으로 조건문과 함께 사용할 수 있다.

for (( ; ; ))
do
    echo "Quit?(yes/no)"
    read answer

    if [ "${answer}" == "yes" ]; then
        break;
    fi
done

 

Bash 반복문 - 디렉토리 엔트리 출력

in 키워드 뒤에 디렉토리와 와일드 카드 ('*')를 입력해서 디렉토리 엔트리를 출력할 수도 있다.

for line in /etc/*
do
    echo ${line}
done

Bash 반복문 - while 문

for문 말고도 while문을 이용해서 반복문 처리를 할 수도 있다. while문의 문법은 다음과 같다.

while [ 조건 ]
do
   반복할 부분
done

혹은 한 줄로 쓸 수도 있따.

while [ 조건 ]; do 반복할 부분; 반복할 부분; done

Bash 반복문 - while문으로 파일 내용 읽기

텍스트 파일의 한줄한줄을 line by line 으로 읽어서 처리하고 싶은 경우 다음 코드처럼 쓰면 된다.

filename='file.txt'
n=1

while read line;
do
    echo "Line $n : $line"
    n=$((n+1))
done < $filename

file.txt 파일의 내용이 다음과 같다면

line1
line2
line3
line4
line5

위 코드는 다음 결과를 출력한다.

댓글