[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 | 회색 |
'IT > 리눅스 쉘 스크립트' 카테고리의 다른 글
[shell script] 리눅스 read 명령어 사용자로부터 변수 값 입력 받기 (6) | 2022.10.05 |
---|---|
[shell script] 쉘 스크립트 기초 #10 - 제어문 until문 설명 및 예제 (62) | 2022.08.07 |
[shell script] 쉘 스크립트 기초 #8 - 제어문 select문 설명 및 예제 (43) | 2022.06.16 |
[shell script] 쉘 스크립트 기초 #7 - 제어문 case문 설명 및 예제 (36) | 2022.06.12 |
[shell script] 쉘 스크립트 기초 #6 - 반복문 for문 개념 및 사용법 (0) | 2022.05.10 |
댓글