본문 바로가기
IT/리눅스 쉘 스크립트

[shell script] 쉘 스크립트 기초 #9 - 제어문 while문 설명 및 예제

by 꾸꾸웍스 2022. 7. 16.
반응형

 


[shell script] 쉘 스크립트 기초 #9 - 제어문 while문 설명 및 예제


 

 

 

※ 목차

1. 쉘 스크립트 while문이란??
2. 쉘 스크립트 for문과 while문의 차이

3. 쉘 스크립트 while문 문법
4. 쉘 스크립트 while문 기본 예제
5. 쉘 스크립트 while문 예제 응용
6. echo 출력 색상 바꾸기

 

 

 

1. 쉘 스크립트 while문 이란??

 

리눅스 쉘(linux shell)에서 사용하는 쉘 스크립트 또는 쉘 프로그래밍 while문은 특정 조건이 참이면 거짓일 때까지 주어진 명령을 순차적으로 반복하는 제어문 중 하나입니다. while문은 모든 프로그래밍 언어에서 널리 사용하는 루프 구조 중 하나이며 while문이 반복될 때마다 조건 명령을 다시 실행하여 반복합니다. 

 

 

 

2. 쉘 스크립트 for문과 while문의 차이

 

 

리눅스 for문을 투호에 비교

위 3 사람이 각자 주어진 3개의 살(矢)을 이용하여 항아리에 던지는 게임을 하여 가장 많이 넣는 사람이 이긴다는 게임입니다. 각자 주어진 살(矢)은 단 3 발이며 3번 동안 던지는 행동을 반복하여 항아리에 살이(矢) 들어가거나 항아리에 튕겨져 나오거나 항아리 밖으로 떨어지는 결과를 토대로 제일 많이 넣은 사람이 이긴다는 조건입니다.

 

 

 

리눅스 while문을 투호에 비교

위 3사람이 가장 먼저 3개의 살(矢)을 항아리에 넣어서 이긴다는 게임입니다. 각자 주어진 화살은 셀 수 없지만 3 사람이 항아리에 살(矢)을  3개를 넣으려고 반복합니다. 만약 A라는 사람이 3개의 살(矢)을 먼저 넣었다면 이 게임은 종료됩니다.

 

 

따라서 리눅스의 제어문 for문은 주어진 list의 조건이 할당되며 반복하는 것이고 리눅스 제어문 while문은 주어진 조건이 참이고 거짓일 때까지 명령을 반복하게 됩니다.

 

 

 

 

 

3. 쉘 스크립트 while문 문법

 

리눅스 while문 기본 문법

while condition
do
	statements 1
	statements 2
    		.
    		.
    		.
	statements n
done

 

while문 condition의 조건을 입력해야 되며 do로 시작하여 done사이에 명령(statements..)이 들어가고 done로 while문을 종료합니다. while문의 수행이 끝난 후 종료 값은 do와 done사이의 마지막에 실행한 명령문의 종료 값이 되며 do와 done사이의 아무런 명령도 실행하지 않은 경우에는 종료 값이 0이 됩니다.

 

 

리눅스 while문 동작 원리

 

리눅스 제어문 while의 기본 문법은 while의 condition이 참이면 do와 done의 있는 사이의 명령을 반복적으로 실행하며 condition의 조건이 거짓일 때까지 반복 실행합니다.

 

 

 

4. 쉘 스크립트 while문 기본 예제

 

while문 기본 루프

$ cat -n while1.sh

1  #!/bin/bash
2  
3  A=1
4  while [ $A -lt 5 ]
5  do
6          echo "A = $A"
7          A=`expr $A + 1`
8  done

▼ while1.sh 실행결과

 

while1.sh 스크립트 파일은 while문을 이용하여 A의 값이 5보다 작을 때까지 반복하는 조건을 입력했으며 이 조건이 참이면 A의 값을 출력해주고 조건이 거짓이면 쉘 스크립트가 종료됩니다

 

 

while문 무한 루프

$ cat -n while2.sh

1  #!/bin/bash
2  
3  A=1
4  while :
5  do
6          A=`expr $A + 1`
7          echo "A = $A"
8          if [ $A -eq 5 ]; then
9                 break
10        fi
11  done

▼ while2.sh와 while3.sh 실행결과

 

while2.sh 스크립트 파일은 while1.sh 스크립트 파일과 다르게 조건을 do와 done사이에 넣고 while문의 조건에 항상 참인 경우의 조건을 넣어줍니다. 콜론( : ) 은 null statement로서 종료 값이 0이기 때문에 무한 반복을 할 수 있고 콜론( : )과 동일한 역할을 하는 true 역시 참의 조건입니다. 따라서 do와 done사이에 A의 값이 5보다 작으면 break명령을 실행해 이전 단계 명령에서 스크립트를 종료하게 됩니다.

 

 

반응형

 

 

5. 쉘 스크립트 while문 예제 응용

 

✔while문을 이용한 모니터링

$ cat -n while.sh

1  #!/bin/bash
2  
3  while true
4  do
5		echo "========================="
6		echo "  Sleep Process Check"
7		echo "-------------------------"
8		echo "  `date "+%Y-%m-%d %H:%M"`"
9		echo "-------------------------"
10
11		CHECK=`ps -ef | grep -v grep | grep -w -q "sleep 300"; echo $?`
12		if [ $CHECK -eq 0 ]; then
13			echo "  process is running"
14		else
15			echo "  process is not running"
16		fi
17		echo "-------------------------"
18		echo "========================="
19		sleep 20
20  done

 

시스템의 하드웨어나 소프트웨어 적으로 원하는 특정값을 두고 지속적으로 모니터링을 하여 상태를 볼 때 유용하게 사용됩니다. while문을 이용하여 디스크 상태, 메모리 상태, CPU상태, 특정 프로세스 등 while문의 반복으로 지속적인 확인을 통해 특정 조건으로 모니터링을 할 수 있습니다. 위의 예시는 sleep 300의 상태의 프로세스가 감지되면 프로세스가 작동하는지 안 하는지 알려주는 while문의 반복문입니다. 

 

▼ while.sh 실행 결과

 

간단한 프로세스 확인이나 디렉토리 파일 등 'watch'라는 명령어로 확인하는 방법도 있지만 사용자 입맛에 맞게 만들어 원하는 특정 값을 볼 수 있다는 장점이 있습니다. 또한 while.sh 쉘 스크립트 파일은 20초마다 반복하며 안에 date 명령어를 이용해서 로그처럼 시간을 찍히게 할 수 있다는 장점 또한 있습니다.

 

 

또한 위 사진과 같이 shell의 장점 중 하나인 echo 명령어의 -e 옵션을 활용하여 색을 구분 지어 눈에 잘 들어오게 모니터링을 할 수 있습니다.

 

 

 

6. echo 출력 색상 바꾸기

 

echo의 -e 옵션은 문자열에서 백 슬래시와 이스케이프 문자를 인용 부호로 묶어 인식하도록 하는데 이것을 이용해서 echo 명령어의 출력 결과의 색상을 변경할 수 있습니다

 

 

 

✔echo 색상 출력 방법

출력 문법:

echo -e "\0311[1;(색상) (출력문자)\033[m"

예시): 빨강

echo -e "\033[1;31m Red color \033[m"

 

 

✔echo 색상 출력 종류

표현 색상
30m 검정
31m 빨강
32m 초록
33m 노랑
34m 파랑
35m 분홍
36m 청록
37m 회색

 

반응형
그리드형

댓글