3. OS이야기/03. Shell Script

[UNIX/LINUX] Shell Script 기본 - 4.while문 (1) 기본 사용법 및 예제

알 수 없는 사용자 2014. 5. 2. 09:38

4. while문

 

(1) 기본 사용법 및 예제 


while [ 조건식 ]; do       // while문 시작

    ~

done                            // while문 종료



for문과 마찬가지로 while문 또한 루프 처리를 담당합니다.

 

사용법이 다소 다르므로 상황에 따라 적절히 선택해서 사용해야 하는데요.

 

이 while문 역시 조건식 뒤에 세미콜론을 사용하지 않고 사용 가능합니다.

 

while문의 조건식엔 보통 산술 비교 형태가 들어갑니다.

 

가령, 다음과 같은 식이지요.


while [ ${index} -le 10 ]      // index 변수값이 10보다 작거나 같은 동안 while문 수행

do

   ~

done



위와 같은 조건식으로 시작하여 '~' 로 처리한 컨텐츠 부분에 그 조건식에 위배되는 순간이 오게 되면 while문을 종료하는 식이지요.

 

헌데 for문이든 while문이든 아주 중요한 것이 있습니다.

 

아실 만한 분들은 다 아시겠지만 바로 무한루프에 빠지는 경우를 방지해야 한다는 건데요.

 

이런 무한루프 방지를 위해 continue 나 break 문을 적절하게 사용해야 합니다.

 

또한, 내가 원하는 결과값을 이미 얻었음에도 불구하고 while문을 계속 수행해야할 필요는 없겠죠?

 

그렇게 되면 불필요하게 시스템의 리소스를 잡아먹게 되고 성능이 느려지게 됩니다.

 

바로 그럴 때 break 나 continue 문을 사용하는 건데요.

 

다음 예제를 한 번 보시죠.


index=1

 

while [ ${index} -le 1000 ]; do    // index 값이 1000보다 작을 때까지 while문 수행

 

    if [ ${index} -eq 10 ]; then       // index 값이 10과 같으면

        age=$((index + 20))            // age 변수에 (index 값 + 20)의 결과값을 할당

    fi

    index=$((index + 1))               // index 값 1 증분

 

done

 

echo 'I am '${age}' years old.'



위 예제를 보시면 결국 내가 원하는 값은 제일 마지막 줄에 echo 커맨드를 통하여 age 값을 포함한 한 문장을 출력하는 것이란 걸 알 수 있습니다.

 

허나, break 문이 존재하지 않기 때문에 index에 10이 할당되고 난 이후에도 while문을 계속 수행할 수밖에 없는 구조로 되어 있습니다.

 

이럴 때 다음과 같이 break 문을 사용하면 시스템 부하도 줄일 수 있고 응답 시간도 줄일 수 있습니다.


index=1

while [ ${index} -le 1000 ]; do    // index 값이 1000보다 작을 때까지 while문 수행

     if [ ${index} -eq 10 ]; then     // index 값이 10과 같으면

         age=$((index + 20))          // age 변수에 (index 값 + 20)의 결과값을 할당

         break                               // 원하는 값을 얻었으므로 while문을 빠져나감 

     fi

     index=$((index + 1))             // index 값 1 증분

done

echo 'I am '${age}' years old.'



위와 같이 for문이든 while문이든 루프 제어문에서 break 나 continue 를 적절히 사용해 주시면, 무한루프도 방지할 수 있고 시스템 부하도 줄일 수 있습니다.(일종의 shell script 튜닝 포인트죠.)

 

이상 while문에 대한 기본 사용법 및 예제였습니다.