[shell script] 쉘 스크립트 기초 #8 - 제어문 select문 설명 및 예제
※ 목차
1. 쉘 스크립트 select문이란?
2. 쉘 스크립트 select문 문법
3. 쉘 스크립트 select문 기본 예제
4. 쉘 스크립트 select문 예제 응용
5. continue와 break 설명
1. 쉘 스크립트 select문이란?
리눅스 쉘(linux shell)에서 사용하는 쉘 스크립트 또는 쉘 프로그래밍 select문은 조건의 여부에 따라 다음 명령을 수행하는 제어문 중 하나입니다. select문은 사용자에게 여러 가지의 메뉴를 번호로 표시하여 사용자로부터 선택입력을 받아 명령을 수행하게 됩니다. 만약 사용자가 A, B, C 총 3개의 선택 메뉴가 있을 때 B를 선택하게 된다면 select문은 아래와 같이 동작하게 됩니다.
2. 쉘 스크립트 select문 문법
위 사진은 select문의 기본 문법 사진입니다. list에 등록된 각 항목은 스크립트를 실행 할때 번호로 생성된 메뉴로 출력되고 선택한 메뉴는 var-name에 저장하고 선택된 번호는 내장 변수 REPLY에 저장하게 됩니다. 선택된 메뉴로 do와 done 사이의 statements의 명령이 실행됩니다. 또한 select문의 특별한 점은 PS3변수로 프롬프트를 사용하는데 PS3변수를 지정하지 않으면 #?로 출력됩니다. 메뉴를 선택할때는 출력된 메뉴의 번호로 선택을 합니다.
3. 쉘 스크립트 select문 기본 예제
아래 예시는 A, B, C, D 중 하나를 선택하는 select문에 대한 예시입니다. 우선 runfile.sh라는 파일에 아래 내용을 입력 후 chmod 명령어로 실행 권한을 부여하고 실행합니다. 중간중간 echo를 넣는 이유는 보기 편하게 줄 간격을 조정하기 위해 넣었습니다(키보드의 enter역할). break에 대한 설명은 맨 아래에 내용에 간략하게 설명되어 있습니다.
$ vi runfile.sh
#!/bin/bash
PS3="Please select one of the 4 above. : "
echo
select choose in "A" "B" "C" "D"
do
echo
echo "You chose ${choose}."
echo
break
done
$ chmod +x runfile.sh
$ ./runfile.sh
select문에 PS3 프롬프트 변수를 넣지 않으면 아래와 같이 #?로 출력됩니다.
4. 쉘 스크립트 select문 예제 응용
리눅스 쉘(linux shell) select문에 대한 예제 응용은 이전 기본 예제에 만들어 놓은 runfile.sh 파일을 수정하며 예제를 진행하겠습니다.
$ ls -l
함수 호출로 select문 만들기
리눅스 스크립트 파일 runfile.sh를 수정하여 아래와 같이 작성합니다. 아래 내용에는 number라는 함수를 만들어 숫자를 선택하는 select문 예제입니다. 함수에 대한 나중에 자세하게 다루겠습니다. 함수 이름은 number로 하고 number(){..내용..} 문법으로 정의하며 호출은 함수 이름인 number로 호출하면 됩니다.
$ vi runfile.sh
#!/bin/bash
PS3="Select number # "
echo
number(){
select i
do
echo
echo "You chose $i."
echo
done
}
number one tow three four five
exit 0
runfile.sh 스크립트 파일 안에 내용은 number이라는 함수 옆에 list값이 나열되어 있어 나열된 리스트들에 대해 사용자에게 메뉴로 출력하게 됩니다. 실행 결과는 아래와 같습니다.
$ ./runfile.sh
case문을 활용한 select문 만들기
리눅스 스크립트 파일 runfile.sh를 수정하여 아래와 같이 작성합니다. 이번 예제에는 select문에 특성에 맞게 각 선택된 메뉴를 case문으로 각각 다르게 동작하는 프로그램을 만들겠습니다. 예를 들어 리눅스 서버에 어떠한 서비스가 동작되는 스크립트를 만들었다고 하면 start, stop, restart, status의 경우의 수를 만들고 선택을 할 수 있게 하여 각각 다르게 동작하는 스크립트 파일을 만드는 예제 내용입니다.
$vi runfile.sh
#!/bin/bash
PS3="Select number # "
echo
select action in start stop status restart
do
echo
case $action in
start)
echo "service start";;
stop)
echo "service stop";;
status)
echo "service status";;
restart)
echo "service restart";;
*)
echo "error"
exit 1 ;;
esac
break
done
runfile.sh 스크립트 파일 안에 내용은 start, stop, status, restart 중 선택된 내용이 action이라는 변수에 저장이 되고 action 변수에 따라 case문이 작동하는 방식입니다. 위 4개의 선택 번호가 아닌 다른 번호를 입력하면 error를 출력하게 됩니다.
$ ./runfile.sh
5. continue와 break 설명
continue는 반복문 안에서 continue를 수행하면 그 아래의 내용을 수행하지 않고 다시 처음의 조건 검사 부분으로 돌아가게 되고 break는 반복문을 무조건 빠져나옵니다. 아래 예시는 continue와 break를 사용하지 않고 반복문 for문으로 1부터 10까지 출력합니다.
continue 예시 내용
위 스크립트 파일 내용에 5번과 6번 줄 사이에 continue를 넣으면 for문이 1부터 5까지 반복적으로 수행하면서 continue의 아래 내용은 반복하지 않고 다시 처음으로 돌아가게 됩니다. 예시 내용은 아래와 같습니다.
break 예시 내용
위 스크립트 파일 내용에 5번과 6번줄 사이에 break를 넣으면 for문이 1부터 5까지 반복적으로 수행되지 않고 break 명령 전까지 실행 후 반복문을 빠져나오게 됩니다. 예시 내용은 아래와 같습니다.
'IT > 리눅스 쉘 스크립트' 카테고리의 다른 글
[shell script] 쉘 스크립트 기초 #10 - 제어문 until문 설명 및 예제 (62) | 2022.08.07 |
---|---|
[shell script] 쉘 스크립트 기초 #9 - 제어문 while문 설명 및 예제 (45) | 2022.07.16 |
[shell script] 쉘 스크립트 기초 #7 - 제어문 case문 설명 및 예제 (36) | 2022.06.12 |
[shell script] 쉘 스크립트 기초 #6 - 반복문 for문 개념 및 사용법 (0) | 2022.05.10 |
[shell script] 쉘 스크립트 기초 #5 - 조건문 if문 옵션 사용법 및 총정리 (0) | 2022.04.27 |
댓글