"select" 명령을 사용하여 Bash의 인쇄 메뉴

"select" 명령을 사용하여 Bash의 인쇄 메뉴

이 명령을 사용하여 간단한 메뉴를 구현하려고 합니다 select. (테스트 목적으로) 스크립트는 다음과 같습니다:

#!/bin/bash
echo "*******************"
PS3='Select an option and press Enter: '
options=("apache" "named" "sendmail")
select opt in "${options[@]}"
do
  case $opt in
        "apache")
          date
          ;;
        "named")
          echo "test"
          ;;
        "sendmail")
          echo "test 2"
          ;;
        *) echo "invalid option";;
  esac
done
echo "*********************"

스크립트는 내가 제공한 유효한 입력을 인식하지 못하고 항상 "잘못된 옵션" 메시지를 인쇄합니다. 이 스크립트에서 내가 뭘 잘못하고 있는 걸까요?

답변1

select로 표시되는 메뉴는 다음과 같습니다.

1) apache
2) named
3) sendmail
Select an option and press Enter: 

이때 "1", "2" 또는 "3"을 입력합니다. 단어를 입력하지 않습니다.

또한 명령 select을 볼 때까지 반복하므로 break다음을 원합니다.

  case $opt in
        "apache")
          date
          break
          ;;
        "named")
          echo "test"
          break
          ;;
        "sendmail")
          echo "test 2"
          break
          ;;
        *) echo "invalid option";;
  esac

사용자가 숫자나 단어를 입력하도록 하려면 다음과 같이 작성할 수 있습니다.

select opt in "${options[@]}"; do
  case "$opt,$REPLY" in
    apache,*|*,apache)     do_something; break ;;
    named,*|*,named)       do_something; break ;;
    sendmail,*|*,sendmail) do_something; break ;;
  esac
done

쉼표에는 구문적인 의미가 없으며 $REPLY 변수(사용자가 실제로 입력하는 변수) 또는 $opt 변수에서 패턴 일치를 활성화할 뿐입니다.

답변2

변수 $opt는 다음과 같이 설정됩니다.숫자사용자 입력. 사용자가 실제로 입력한 내용을 보려면 를 살펴보세요 $REPLY.

관련 정보