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