dountil() {
#Prompt user below to guess randomly-generated number between 1 and 10
(( answer = $RANDOM % 1-10 ))
until [[ $guess -eq answer ]]
do
read -p "Enter a number between 1 and 10:" guess
if [[ $guess -ne answer ]]; then
echo "Incorrect. Try again"
elif [[ $guess -eq answer ]]; then
echo "Correct! Want to play again?"
read -p prompt
if [[ $prompt = yes ]]
dountil
if [[ $prompt = no ]]
then
echo "Goodbye."
fi
};
지난 며칠 동안 이 문제를 해결하려고 노력했지만 거의 매번 벽에 부딪혔습니다. 몇 가지 버그를 수정했지만 새로운 버그가 나타납니다. 지금처럼, 나는 얻는다
예상치 못한 표시 '}' 근처에 구문 오류가 있습니다.
어떤 도움이라도 대단히 감사하겠습니다!
답변1
항상 올바른 들여쓰기로 코드를 작성하세요. 문제는 뻔한데...
dountil () {
(( answer = $RANDOM % 1-10 ))
until [[ $guess -eq answer ]]
do
read -p "Enter a number between 1 and 10:" guess
if [[ $guess -ne answer ]]; then
echo "Incorrect. Try again"
elif [[ $guess -eq answer ]]; then
echo "Correct! Want to play again?"
read -p prompt
if [[ $prompt = yes ]]
dountil
if [[ $prompt = no ]]
then
echo "Goodbye."
fi
}
적어도 2개 then
, 2개 fi
, 1개가 done
누락되었습니다. 그런 다음 내부에서 다시 함수를 호출하는 것은 무엇입니까?
코딩 수준에 따라 실제로 한 번에 하나 또는 두 개의 명령만 추가한 다음 새 버전의 스크립트를 실행해야 합니다. 구문 문제를 쉽게 파악하기 위한 것입니다.
재귀를 피하다
어차피 기능은 필요없어
while true; do
# ...
if [[ $prompt != yes ]]; then
break
fi
done
함수를 루프로 만들기
dountil () {
while true; do
# ...
if [[ $prompt != yes ]]; then
break
fi
done
}
핵심 코드만 함수에 넣기
guess_number () {
(( answer = $RANDOM % 1-10 ))
read -p "Enter a number between 1 and 10: " guess
if [[ $guess -ne answer ]]; then
echo "Incorrect."
else
echo "Correct."
fi
}
while true; do
guess_number
# ...
if [[ $prompt != yes ]]; then
break
fi
done