쉘 스크립트에서 메뉴 만들기

2023. 7. 11. 11:34IT/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




배열로 메뉴 만들기

배열 변수는 여러 데이터를 저장할 수 있습니다. 따라서 기본 메뉴를 만들기위한 데이터 목록으로 배열을 사용할 수 있습니다
여기서는 함수를 호출할 때 배열을 파라미터로 지정하여 처리하도록 하였습니다.

여기에 대한 예제는 다음 포스트에서 다루어 보도록 하겠습니다.