$CHOICE가 "QUIT"이 아니거나 주어진 정수(변수)보다 작은 숫자가 아닌 한 이 루프를 유지합니다.
나는 이것을 사용하고 있습니다 : (예를 들어 22를 사용)
NUMBER=22
CHOICE=99
while [ "$CHOICE" -gt "$NUMBER" ] && [ "$CHOICE" != "QUIT" ]; do
read CHOICE < /dev/tty
done
그러나 "test"를 입력하면 첫 번째 테스트에서 정수를 예상하기 때문에 스크립트가 충돌합니다.
이 충돌을 방지하려면 어떻게 해야 합니까?
답변1
CHOICE가 "QUIT"이 아니거나 NUMBER보다 작은 정수이면 다음 코드가 반복됩니다.
NUMBER=22
while :; do
read CHOICE
case $CHOICE in
QUIT) break;;
*[!0-9]*|'') ;;
*) test "$CHOICE" -lt "$NUMBER" && break;;
esac
done
사용자가 ^D를 입력할 때 루프를 종료하려면 read
루프 조건을 다음과 같이 설정해야 합니다 while read CHOICE; do case $CHOICE ...
.
답변2
조정모스비답변:
NUMBER=22
while read CHOICE ; do
case "${CHOICE}" in
QUIT) break ;;
*[!0-9]*) ;;
?*) [ "${CHOICE}" -lt $NUMBER ] && break ;;
esac
done
read
루프에 넣지 마십시오 .- 초기화가 필요하지
$CHOICE
않으며 - 대신 조건을 줄이십시오
*)
-?*)
모스비|''
떨어질 수도 있습니다 .
답변3
알파벳 문자에 대해 추가 테스트를 수행해야 할 수도 있습니다.
while [ "$CHOICE" != "QUIT" ] && { [ "${CHOICE//[[:alpha:]]}" != "$CHOICE" ] || [ "$CHOICE" -gt 10 ]; }
do read CHOICE < /dev/tty
done