개발관련/Linux

Linux 셸 스크립트에서 Yes/No/Cancel 입력을 요청하는 방법

Rateye 2021. 6. 15. 10:48
728x90
반응형
질문 : Linux 셸 스크립트에서 예 / 아니요 / 취소 입력을 요청하는 방법은 무엇입니까?

쉘 스크립트에서 입력을 일시 중지하고 사용자에게 선택을 요청하고 싶습니다.
표준 Yes , No 또는 Cancel 유형 질문입니다.
일반적인 bash 프롬프트에서 어떻게 수행합니까?

답변

쉘 프롬프트에서 사용자 입력을 얻는 가장 간단하고 널리 사용 가능한 방법은 read 명령입니다. 사용법을 설명하는 가장 좋은 방법은 간단한 데모입니다.

while true; do
    read -p "Do you wish to install this program?" yn
    case $yn in
        [Yy]* ) make install; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

Steven Huwig가 지적한 또 다른 방법은 Bash의select 명령입니다. select 를 사용하는 동일한 예입니다.

echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make install; break;;
        No ) exit;;
    esac
done

select 를 사용하면 입력을 삭제하지 않아도됩니다. 사용 가능한 선택 항목이 표시되고 선택 항목에 해당하는 번호를 입력합니다. 또한 자동으로 루프되므로 유효하지 않은 입력을 제공하는 경우 재 시도 while true

또한 Léa Gris 는 그녀의 답변 에서 요청 언어를 불가지론 적으로 만드는 방법을 보여주었습니다. 여러 언어를 더 잘 제공하기 위해 첫 번째 예제를 적용하는 것은 다음과 같습니다.

set -- $(locale LC_MESSAGES)
yesptrn="$1"; noptrn="$2"; yesword="$3"; noword="$4"

while true; do
    read -p "Install (${yesword} / ${noword})? " yn
    if [[ "$yn" =~ $yesexpr ]]; then make install; exit; fi
    if [[ "$yn" =~ $noexpr ]]; then exit; fi
    echo "Answer ${yesword} / ${noword}."
done

분명히 다른 통신 문자열은 여기에서 번역되지 않은 상태로 남아 있습니다 (Install, Answer). 더 완전하게 완성 된 번역에서 다루어야 할 필요가 있지만, 부분 번역조차도 많은 경우에 도움이 될 것입니다.

마지막으로 F. Hauri 의 우수한 답변 을 확인하십시오.

출처 : https://stackoverflow.com/questions/226703/how-do-i-prompt-for-yes-no-cancel-input-in-a-linux-shell-script
728x90
반응형