[Linux 셸 스크립트] bash - 131 간단한 메뉴를 표시해서 사용자가 선택할 수 있게 하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] bash - 131 간단한 메뉴를 표시해서 사용자가 선택할 수 있게 하기

by 찬찬이 아빠 2021. 7. 13.
반응형
  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문으로 분기해서 처리를 실행합니다.

 

이러면 메뉴를 간단히 작성할 수 있습니다. 조작에 익숙하지 않은 초보자를 위한 스크립트에서 대화형 메뉴를 이용하고 싶을 때 사용하면 좋습니다.

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글