1. 사용 명령어 |
(1) select
(2) case
2. 키워드 & 사용처 |
(1) 키워드
메뉴, 선택
(2) 사용처
간단한 메뉴를 표시하고 사용자가 조작하게 만들고 싶을 때 사용합니다.
3. 실행 예제 |
$ ./bash-select.sh
1) list file
2) current directory
3) exit
Menu: 2
/home/park/bin
Menu: 3 <- 사용자가 3을 입력하면 스크립트 종료
4. 스크립트 |
#!/bin/bash
# 메뉴 프롬프트 정의
PS3='Menu: ' ①
# 메뉴 표시 정의. 메뉴 각 항목은 in에 목록으로 지정
# $item은 선택한 목록 문자열이, $REPLY에는 입력한 숫자가 대입됨
select item in "list file" "current directory" "exit"
do
case "$REPLY" in
1)
ls
;;
2)
pwd
;;
3)
exit # 선택값에 exit 명령어가 없으면 메뉴에서 빠져나가지 못함
;;
*) ②
echo "Error: Unknown Command"
;;
esac
echo
done
5. 해설 |
이 스크립트는 메뉴를 표시합니다. 메뉴 첫 항목 "list file"을 선택하면 ls 명령어를, "current directory"를 선택하면 pwd 명령어를, 세 번째는 "exit"를 선택하면 exit 명령어를 실행합니다. 이런 메뉴 표시 스크립트는 bash 기능인 select문을 이용합니다.
bash select문은 간단한 메뉴를 만드는 기능으로 다음처럼 이용합니다.
PS3=프롬프트 문
select <변수명> in <리스트>
do
...(명령어)
done
<리스트>로 지정하는 문자열을 바탕으로 bash는 메뉴를 조합해서 자동으로 번호를 할당해서 표시합니다 .select문의 in <리스트> 부분은 생략 가능한데 생략하면 위치 파라미터 $@, 즉 명령행 인수가 지정되어 있다고 봅니다.
그리고 PS3는 select문이 이용하는 bash 셸 변수로 이 문자열을 메뉴 프롬프트로 표시합니다. select문은 사용자가 선택한 목록값이 <변수명>에 대입됩니다. 그리고 이때 사용자가 입력한 숫자는 동시에 셸 변수 REPLY에 대입됩니다. 메뉴로 case문을 이용해서 분기할 때 셸 변수 REPLY를 이용하면 편리합니다. 예제에서도 셸 변수 REPLY를 이용해서 선택한 메뉴를 취득합니다.
예제 스크립트는 우선 ①에서 셸 변수 PS3에 프롬프트문을 대입합니다. 여기서 설정한 값이 메뉴 표시에서 사용하는 질문문이 됩니다.
②는 select문으로 메뉴를 정의합니다. "list file", "current directory", "exit"의 세 가지 문을 목록으로 넘깁니다. 실행 예에서 보았듯 여기에 순서대로 1), 2), 3)이라는 숫자를 bash가 자동으로 붙여주므로 스크립트에서는 작성하지 않아도 됩니다. 사용자가 입력한 숫자는 select문으로 셸 변수 REPLY에 대입되므로 이걸 case문으로 분기해서 처리를 실행합니다.
이러면 메뉴를 간단히 작성할 수 있습니다. 조작에 익숙하지 않은 초보자를 위한 스크립트에서 대화형 메뉴를 이용하고 싶을 때 사용하면 좋습니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
셸 스크립트를 sh로 작성할까? bash로 작성할까? (0) | 2021.07.13 |
---|---|
[Linux 셸 스크립트] bash - 132 정수값으로 난수 얻기 (0) | 2021.07.13 |
[Linux 셸 스크립트] bash - 130 파이프 처리로 각 명령어 종료 상태값 조사하기 (0) | 2021.07.13 |
[Linux 셸 스크립트] bash - 129 중간 파일 없이 명령어 출력을 파일처럼 다루기 (0) | 2021.07.06 |
[Linux 셸 스크립트] bash - 128 변수 내부 문자열 일부를 치환하기 (0) | 2021.07.06 |
댓글