본문 바로가기

카테고리 없음

[리눅스] 29. 흐름 제어: While 루프와 Until 루프

 

이전 장에서 메뉴 방식(if 분기 제어)를 통해서 시스템 정보를 생성하였다.
프로그램이 작동하긴 하지만 사용하는 데 있어 여전히 심각한 문제가 존재한다. 단 한 번의 메뉴 선택 후 종료되기 때문이다. 심지어 유효하지 않은 선택이 발생하면 프로그램은 오류 메시지와 함께 종료해버리게 된다. 즉, 사용자에게 다시 선택할 수 있는 기회조차 주지 못한다는 것이다.

이를 해결하기 위해서는 루핑(looping)이라는 프로그래밍 개념에 대해 알아볼 것이다.

 

 

1. While

while 루프 명령어의 문법은
"while commands; do commands; done"가 된다.

1부터 5까지의 연속된 5개의 숫자를 표시하길 원한다면 다음과 같이 bash 스크립트를 만들 수 있다.
count=1

while [$count -le 5 ]; do
	echo $count
    count=$((count + 1))
done​
스크립트가 실행되면 다음과 같이 결과를 볼 수 있다.
1
2
3
4
5​

 

 

 

2. 루프 탈출

bash는 두 개의 내장 명령어를 제공하는데, 루프 내에서 프로그램의 흐름을 제어하기 위함이다. 

break 명령어는 즉각적으로 루프를 중단하고 프로그램이 루프 다음에 나오는 구문들을 실행하도록 한다. 
continue 명령어는 루프가 진행되는 중간에 뒤에 남은 내용을 건너뛰고 다음 루프의 처음부터 사용하도록 한다.

 

 

3. until

until 명령어는 0이 아닌 종료 상태를 만났을 때 루프를 종료하는 대신에 계속 수행된다는 것만 제외하고 while과 동일하다.
즉, 종료 상태 값으로 0을 받을 때 까지 계속된다.

count=1

until [$count -gt 5]; do
	echo $count
    count=$((count + 1))
done​
count 변수의 값이 5보다 작거나 같은 동안에 루프를 반복시키는 스크립트이다.

 

 

4. 루프를 이용한 파일 읽기

while 및 until 명령으로 표준 입력을 처리할 수 있다.

while read distro version release; do
	printf "Distro: $s\tVersion: %s\tReleased: %s\n" \n
    	$distro \
        $version \
        $release
done < distros.txt​

파일을 루프 안으로 포함시키기 위해서 리다이렉션 연산자를 done 구문 다음에 사용하였다. 

 

 

1. 1을 초기 값으로 갖고 짝수만 출력하려고 할 때, 홀수일 때는 출력하지 않고 짝 수 일때만 숫자를 출력하는 스크립트를 작성해주세요.. (단 10일 때는 출력하지 않고 루프를 중단한다.)

 

2. 현재 폴더를 기준으로 .txt 확장자를 가진 모든 파일을 찾고, 파일 안의 내용에서 'CommendLine'이라는 단어를 포함하는 파일만 result.txt에 쓰기 (cat, |, grep 명령어 사용)

 

3. (1) 트레이싱(tracing)이란? 그리고, (2) 트레이싱이 보통 어떤 목적으로 사용되는지와 (3) 선택된 영역에서 트레이싱을 수행하기 위한 명령어는?

 

1.

number=1

while true; do

     if [ $((number % 2)) -eq 1 ]; then

            number=$((number + 1))

            continue

     fi

     if [ $((number % 2)) -eq 0 ]; then

            echo "$number"

            number=$((number + 1))

            continue

     fi

     if [ $number -eq 10 ]; then

            break

     fi

done

 

 

2. 

find ./ -name *.txt | while read linux; do

    if [ cat $linux | grep -iq 'CommendLine' ]; then

    fi

done > result.txt

      

3. (1) 프로그램의 실행에 관한 정보를 기록하기 위한 로깅의 특별한 사용이다.  (2) 트레이싱은 보통 프로그래머가 디버깅을 목적으로 사용된다.  (3) set -x, set +x