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

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

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

 


[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 명령 전까지 실행 후 반복문을 빠져나오게 됩니다. 예시 내용은 아래와 같습니다.

 

 

 


 

반응형
그리드형

댓글