숫자가 입력될 때까지 사용자 입력이 반복됩니다.

숫자가 입력될 때까지 사용자 입력이 반복됩니다.

사용자가 숫자를 올바르게 입력할 때까지 질문이 계속 나오도록 루프를 만들려고 합니다. 나는 이것을 시도했지만 내가 뭘 잘못했는지 모르겠습니다. 어떤 도움이라도 대단히 감사하겠습니다.

#!/bin/sh 

read -p "Welcome to the Draw Program. Please enter a number in-between 5-20: " input

while [ $input -lt 5 ] && [ $input -gt 20 ] 
do 
echo "Your number wasn't within the range. Please re-enter"
done

답변1

어떻게 동시에 숫자가 5보다 작을 수 있습니까?그리고20보다 큽니까? 내 생각엔 당신이 원하는 것:

while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]

또한 루프의 번호를 다시 묻는 메시지를 표시해야 합니다.

while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
do
    read -rp "Your number wasn't within the range. Please re-enter" input
done

참고로 POSIX에서는 읽기에 -p 옵션을 지정하지 않으므로 모든 형태의 sh에서 지원된다는 보장은 없습니다. 프로그램이 여러 모호한 운영 체제에서 사용되도록 의도되었으며 이식성이 중요한 경우 다음을 수행할 수 있습니다.

printf '%s' "Your number wasn't within the range. Please re-enter: "
read -r input

답변2

다음과 같이 작성하는 것이 더 직관적이고 명확할 수 있습니다.

while ! (( (5 <= input) && (input <= 20) )); do
    echo "Your number wasn't within the range. Please re-enter"
done

위에서 보면 와 input사이에 테스트 중이라는 것을 한눈에 알 수 있는데, 코드에 변수 이름이 거기에 있기 5때문이다 20.input

관련 정보