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문에 대한 기본 사용법 및 예제였습니다.
'3. OS이야기 > 03. Shell Script' 카테고리의 다른 글
[UNIX/LINUX] Shell Script - sed 명령을 이용한 new line <-> 특정 문자열 (1) (0) | 2014.05.07 |
---|---|
[UNIX/LINUX] Shell Script 기본 - 5.case문 (1) 기본 사용법 및 예제 (0) | 2014.05.07 |
[UNIX/LINUX] Shell Script 기본 - 3.for문 (2) 예제 (0) | 2014.04.29 |
[UNIX/LINUX] Shell Script 기본 - 3.for문 (1) 기본 사용법 (0) | 2014.04.28 |
[UNIX/LINUX] Shell Script 기본 - 2.기본 문법 (3) 배열 (0) | 2014.04.24 |