![사례 설명 도움말](https://linux55.com/image/188137/%EC%82%AC%EB%A1%80%20%EC%84%A4%EB%AA%85%20%EB%8F%84%EC%9B%80%EB%A7%90.png)
저는 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
.
루프 본문 내에서 select
in 값은 $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
다른 무한 루프와 마찬가지로 select
Exit 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