쉘 스크립트에서 메뉴 만들기
2023. 7. 11. 11:34ㆍIT/S . e . v . e . r . I . n . f . r . a
심플 메뉴 만들기
이 예제에서는 select문을 사용해 간단한 메뉴를 표시하는 방법을 설명하겠습니다.
여기서 select명령은 목록에 있는 항목들을 넘버링을 하여 출력하게 됩니다.
다만 이 경우는 선택을 하고 로직을 종료하려면 사용자는 Ctrl + c 를 눌러 스크립트를 종료해야합니다.
#!/bin/bash
# Define the menu list here
select brand in Samsung Sony iphone symphony Walton
do
echo "You have chosen $brand"
done
case문을 이용한 메뉴
이 예제에서는 case 문을 사용하여 bash 메뉴를 만드는 방법을 보여줍니다.
위에 예제에서와 마찬가지로 select명령은 목록에 있는 항목들을 넘버링을 하여 출력하고
select문에서 받아온 변수를 case문에서 판단하여 특정액션을 출력하는 예제입니다.
#!/bin/bash
echo "Which Operating System do you like?"
# Operating system names are used here as a data source
select os in Ubuntu LinuxMint Windows8 Windows7 WindowsXP
do
case $os in
# Two case values are declared here for matching
"Ubuntu"|"LinuxMint")
echo "I also use $os."
;;
# Three case values are declared here for matching
"Windows8" | "Windows10" | "WindowsXP")
echo "Why don't you try Linux?"
;;
# Matching with invalid data
*)
echo "Invalid entry."
break
;;
esac
done
중첩 메뉴
메뉴를 선택한 후 세부 메뉴별로 서브메뉴를 중첩되게 작성할 수 있습니다.
각 메뉴별로 서브 카테고리를 설정한다던가 할 때 유용하게 사용 가능합니다.
#!/bin/bash
while true
do
# Parent menu items declared here
echo "구입을 희망하는 제품을 선택해 주세요"
select item in Mouse Printer Monitor HDD
do
case $item in
Mouse)
mouse[0]="mouse"
echo "몇 개를 주문하시겠습니까? : "
read countmouse
mouse[1]=$countmouse
echo "현재 ${mouse[0]}를 ${mouse[1]}개 주문하였습니다."
echo "계속 쇼핑을 하시겠습니까[y/n] : "
read ans
if [[ $ans == "y" ]]; then
break
else
exit
fi
;;
Printer)
echo "프린터 메이커를 선택해주세요 : "
# Sub-menu items here declared here
select sub_item in Samsung HP Dell
do
# case statement for sun-menu items
case $sub_item in
Samsung)
echo "삼성 프린터는 200원입니다."
break
;;
HP)
echo "HP 프린터는 450원입니다."
# return to parent menu
break
;;
Dell)
echo "델 프린터는 현재 제고가 없습니다. 다른 프린터를 선택해주세요"
# return to the parent menu
continue
;;
esac
done
printer[0]="$sub_item 프린터"
echo "몇 개를 주문하시겠습니까? : "
read countprinter
printer[1]=$countprinter
echo "현재 ${printer[0]}를 ${printer[1]}개 주문하였습니다."
echo "계속 쇼핑을 하시겠습니까[y/n] : "
read ans
if [[ $ans == "y" ]]; then
break
else
exit
fi
;;
Monitor)
echo "현재 모니터는 제고가 없습니다."
break
;;
HDD)
echo "현재 하드디스크는 제고가 없습니다."
# return from the script
break
;;
esac
done
done
배열로 메뉴 만들기
배열 변수는 여러 데이터를 저장할 수 있습니다. 따라서 기본 메뉴를 만들기위한 데이터 목록으로 배열을 사용할 수 있습니다
여기서는 함수를 호출할 때 배열을 파라미터로 지정하여 처리하도록 하였습니다.
여기에 대한 예제는 다음 포스트에서 다루어 보도록 하겠습니다.
'IT > S . e . v . e . r . I . n . f . r . a' 카테고리의 다른 글
Apache2.4에서 "client denied by server configuration"이라는 오류 발생시 (0) | 2022.07.07 |
---|---|
쉘 스크립트에서 계산하기 [expr] (0) | 2022.05.30 |
XtraBackup(MariaBackup)에서 Stream 백업시 로깅하기 (0) | 2021.07.16 |
[shell] find로 검색한 리스트를 배열에 넣기 (0) | 2021.07.15 |
삼바 서버 설정하기 (0) | 2021.03.08 |
gzip을 멀티코어를 사용해 압축해보자 (0) | 2021.03.01 |