SW/리눅스

Linux : Bash : Select : Make Menus : 사용 방법, 예제, 명령어

얇은생각 2022. 6. 21. 07:30
반응형

이 튜토리얼에서는 Bash에서 선택한 구성의 기본 사항에 대해 설명합니다.

선택한 구성을 사용하여 메뉴를 생성할 수 있습니다.

 

 

Linux : Bash : Select : Make Menus : 사용 방법, 예제, 명령어

 

 

Bash 생성을 선택

선택한 구성은 항목 목록에서 메뉴를 생성합니다. for 루프와 거의 동일한 구문을 사용합니다.

select ITEM in [LIST]
do
  [COMMANDS]
done

 

 

[LIST]는 공백, 숫자 범위, 명령의 출력, 배열 등으로 구분된 일련의 문자열일 수 있습니다. 선택한 구성에 대한 사용자 지정 프롬프트는 PS3 환경 변수를 사용하여 설정할 수 있습니다.

선택한 구성이 호출되면 목록의 각 항목이 화면에 인쇄되며(표준 오류), 앞에 숫자가 표시됩니다.

표시된 항목 중 하나에 해당하는 숫자를 입력하면 [ITEM]의 값이 해당 항목으로 설정됩니다. 선택한 항목의 값이 회신 변수에 저장됩니다. 그렇지 않으면 사용자 입력이 비어 있으면 프롬프트와 메뉴 목록이 다시 표시됩니다.

선택 루프는 break 명령이 실행될 때까지 계속 실행되고 사용자 입력을 요청합니다.

선택한 구성의 작동 방식을 시연하기 위해 다음 간단한 예를 살펴보겠습니다.

이 스크립트는 번호가 포함된 목록 항목과 PS3 프롬프트로 구성된 메뉴를 표시합니다. 사용자가 숫자를 입력하면 스크립트에서 선택한 문자와 숫자를 인쇄합니다.

PS3="Enter a number: "

select character in Sheldon Leonard Penny Howard Raj
do
    echo "Selected character: $character"
    echo "Selected number: $REPLY"
done

# 1) Sheldon
# 2) Leonard
# 3) Penny
# 4) Howard
# 5) Raj
# Enter a number: 3
# Selected character: Penny
# Selected number: 3
# Enter a number:

 

 

 

Bash 예제를 선택

일반적으로 select는 if 문과 함께 사용됩니다.

좀 더 실용적인 예를 살펴보도록 하겠습니다. 이것은 사용자에게 입력을 요청하고 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 기본적인 산술 연산을 수행하는 간단한 계산기입니다.

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 + $n2 = $(($n1+$n2))"
      ;;
    subtract)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 - $n2 = $(($n1-$n2))"
      ;;
    multiply)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 * $n2 = $(($n1*$n2))"
      ;;
    divide)
      read -p "Enter the first number: " n1
      read -p "Enter the second number: " n2
      echo "$n1 / $n2 = $(($n1/$n2))"
      ;;
    quit)
      break
      ;;
    *) 
      echo "Invalid option $REPLY"
      ;;
  esac
done

# 1) add
# 2) subtract
# 3) multiply
# 4) divide
# 5) quit
# Select the operation: 1
# Enter the first number: 4
# Enter the second number: 5
# 4 + 5 = 9
# Select the operation: 2
# Enter the first number: 4
# Enter the second number: 5
# 4 - 5 = -1
# Select the operation: 9
# Invalid option 9
# Select the operation: 5

 

 

스크립트가 실행되면 메뉴와 PS3 프롬프트가 표시됩니다. 작업을 선택한 다음 두 개의 숫자를 입력하라는 메시지가 표시됩니다. 사용자의 입력에 따라 스크립트가 결과를 인쇄합니다. 사용자는 선택 후 break 명령이 실행될 때까지 새 작업을 수행하라는 메시지를 받게 됩니다.

이 스크립트의 한 가지 단점은 정수로만 작업할 수 있다는 것입니다.

여기 조금 더 발전된 버전이 있습니다. 우리는 수학적 계산을 위해 유동수를 지원하는 bc 도구를 사용하고 있습니다. 또한 반복 코드는 함수 안에 그룹화됩니다.

calculate () {
  read -p "Enter the first number: " n1
  read -p "Enter the second number: " n2
  echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}

PS3="Select the operation: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      calculate "+";;
    subtract)
      calculate "-";;
    multiply)
      calculate "*";;
    divide)
      calculate "/";;
    quit)
      break;;
    *) 
      echo "Invalid option $REPLY";;
  esac
done

# 1) add
# 2) subtract
# 3) multiply
# 4) divide
# 5) quit
# Select the operation: 4
# Enter the first number: 8
# Enter the second number: 9
# 8 / 9 =  .88888888888888888888
# Select the operation: 5

 

 

선택한 구조를 사용하면 메뉴를 쉽게 생성할 수 있습니다. 특히 사용자 입력이 필요한 셸 스크립트를 작성할 때 유용합니다.

반응형