until
사용자에게 반복적으로 숫자를 묻는 루프가 포함된 스크립트를 만들어야 합니다 . - 50번이 아닌 경우 "잘못된 번호입니다. 다시 시도해 주세요."라는 메시지가 표시됩니다. - 다른 번호를 요청하세요. - 숫자가 50이면 "성공했습니다!"라는 메시지를 표시하고 중지합니다.
이것이 내가 지금까지 가지고 있는 것입니다:
echo -n "please choose a number: "
read number
until [$number -eq 50];
do
if [$number !=50]
then
echo "Wrong number; try again"
read wrong
else
echo -n "Please choose a number: "
read newnum
fi
done
"번호를 선택하세요" 문을 반복하는 방법을 모르겠습니다. 나는 항상 오류가 발생합니다.
syntax error near unexpected token 'fi'
온라인에서 찾고 있지만 UNTIL 루프의 입력 및 출력에 대한 명확한 예가 없습니다.
답변1
echo -n "please choose a number: "
read number
until [ $number -eq 50 ]
do
# if [ $number -ne 50 ]
# then
echo "Wrong number; try again"
read number
# fi
done
echo You got it\!
첫 번째 read
변수는 에서 읽혀집니다 number
. 루프는 50이 될 until
때까지 계속됩니다 .$number
루프 내부의 테스트는 숫자가 50(같지 않음) until
인 경우에만 들어오기 때문에 불필요합니다.-ne
당신이 가진 주요 문제는 read
루프 내부에서 구성 검사( ) number
와 until
동일한 변수를 업데이트해야 한다는 것입니다.
if
공백으로 둘러싸인 다음 단어가 명령 이름이기 때문에 공백도 중요합니다 . [$number
입력했지만 "["라는 접두사가 붙은 항목을 평가합니다. 이는 기존 명령의 이름이 아닐 가능성이 높습니다. 예를 들어 첫 번째 추측이 이면 명령 42
은 if
명령을 실행하려고 시도하여 [42
다음과 같은 오류가 발생합니다.[42: not found
.
또한 숫자 비교는 -eq
, -lt
, -ge
, -gt
, 를 사용하여 -ge
수행 됩니다 -ne
.
=
그리고 =!
문자열의 경우.
답변2
다른 답변에는 프로그램에 대한 좀 더 일반적인 제안이 있으므로 다음과 관련된 실제 오류를 알려 드리겠습니다.if
if [$number !=50]
그것은해야한다:
if [ $number -ne 50 ]
여기서 세 가지를 바꿨어요
!=
로 대체했습니다-ne
. 첫 번째 것은 유효하지 않습니다.[
와 사이에 공백을 추가했습니다$number
. (첫 번째 단계를 수정하여 이를 수행하지 않으면 어떻게 되는지 확인하십시오.)
물론 예상치 못한 동작을 하는 이상한 프로그램을 보게 되겠지만, 프로그램은 실행될 것입니다 :)
답변3
나는 이렇게 할 것이다:
#!/usr/bin/env bash
while :; do
read -p "Please choose a number: " number
[ "$number" -eq 50 ] 2>/dev/null
case $? in
0) break ;;
1) echo "Wrong number; try again." ;;
2) echo "Not a valid number; try again." ;;
esac
done
echo "You got it!"
필요한 경우 while
교체할 위치 until
. 그런데 교수님이 그러실 것 같아요.아니요Musicstrings가 이 프로그램을 제출해 주시면 기쁘겠습니다. :)
답변4
당신의예기치 않은 태그 'fi' 근처에 구문 오류가 있습니다.then
및 뒤에 CR 문자와 같은 보이지 않는 문자가 없으면 게시한 코드로 설명할 수 없습니다 else
(파일이 Microsoft OS의 경우 줄 구분 기호는 LF가 아니라 CRLF입니다. 그러나 DOS 형식의 파일인 경우, do
CR로 인해 또는 이후에 다른 오류 메시지가 나타날 것으로 예상 했습니다 done
.
편집하다: 문제의 개정 내역을 살펴보면 다음 오류에 해당하는 것으로 보입니다.이전 버전의 스크립트.
이미 지적했듯이 명령 구문에는 따옴표가 없는 변수와 같은 많은 오류가 있지만 [
루프 구문은 다음과 같다고 덧붙이고 싶습니다 until
.
until
condition-command-list
do
action-command-list
done
condition-command-list
예를 들어, 원하는 수의 명령이 될 수 있으므로 action-command-list
다음을 수행할 수 있습니다.
until
printf 'please choose a number: '
read number || [ -n "$number" ] || exit
[ "$number" -eq 50 ]
do
echo >&2 'Wrong number; try again'
done
해당 || exit
부분은 EOF에서 스크립트를 종료하는 것입니다(그렇지 않으면 실행 중에 스크립트의 stdout이 닫히면 영원히 반복됩니다 echo 49 | your-script
).