사례 설명 도움말

사례 설명 도움말

저는 Unix를 처음 접했고 이 사례 설명에 도움이 필요합니다. 내가 원하는 것은 사용자가 Case 문을 사용하여 변수를 선택하게 한 다음 시스템이 사용자 선택의 결과를 읽도록 하는 것입니다. 내 스크립트 구조는 다음과 같습니다(예:).

CHOOSEfruit () {
clear
echo "Choose fruit you need to buy (a.Apple b.Banana c.Pear d.Pineapple)"
read FRUIT
case $FRUIT in
    a|A)
    echo "Apple"
    ;;
    b|B)
    echo "Banana"
    ;;
    c|C)
    echo "Pear"
    ;;
    d|D)
    echo "Pineapple"
    ;;
esac
clear
echo "The fruit you need to buy is $FRUIT"
echo ""
read -p "Press [Enter] key to go back to main menu"
clear
}

"a"를 선택하면 스크립트에서 "The Fruit you need to buy is apples"를 출력하고 싶습니다.

답변1

이 문제는 루핑을 통해 더 잘 해결됩니다 select.

PS3='Please select fruit from the menu: '

select fruit in 'No fruit please' Apple Banana Pear Pineapple; do
    case $REPLY in
        1)
            # User wants no fruit
            unset fruit
            break
            ;;
        [2-5])
            # All ok, exit loop
            break
            ;;
        *)
            # Invalid choice
            echo 'Try again' >&2
    esac
done

if [ -n "$fruit" ]; then
    printf 'The fruit you need is %s\n' "$fruit"
else
    echo 'You selected no fruit!'
fi

select루프는 사용자에게 대화형 메뉴의 옵션 목록을 제공합니다. 사용자에게 메뉴에서 항목을 선택하라는 메시지를 제공하는 문자열입니다 $PS3.

루프 본문 내에서 selectin 값은 $fruit사용자가 선택한 실제 텍스트 문자열이지만 $REPLY사용자가 프롬프트에 입력하는 모든 값이 됩니다.

case ... esac루프 내에서는 명령문을 사용할 필요가 없습니다 . 여기서는 어떤 코드든 사용할 수 있습니다. 예를 들어 다음을 사용하면 더 편안해질 수 있습니다 if ... then ... elif ... else ... fi.

if [ "$REPLY" = 1 ]; then
    unset fruit
    break
elif [[ $REPLY == [2-5] ]]; then
    break
else
    echo 'Try again' >&2
fi

다른 무한 루프와 마찬가지로 selectExit Loop를 사용하십시오.break

이 코드를 세 번 실행하세요.

$ bash script
1) No fruit please
2) Apple
3) Banana
4) Pear
5) Pineapple
Please select fruit from the menu: 1
You selected no fruit!
$ bash script
1) No fruit please
2) Apple
3) Banana
4) Pear
5) Pineapple
Please select fruit from the menu: 2
The fruit you need is Apple
$ bash script
1) No fruit please
2) Apple
3) Banana
4) Pear
5) Pineapple
Please select fruit from the menu: 6
Try again
Please select fruit from the menu: 3
The fruit you need is Banana

답변2

거의 맞췄습니다. 다음과 같이 사례 설명을 편집하세요.

case $FRUIT in
    a|A)
    FRUIT="Apple"
    ;;
    b|B)
    FRUIT="Banana"
    ;;
    c|C)
    FRUIT="Pear"
    ;;
    d|D)
    FRUIT="Pineapple"
    ;;
esac

관련 정보