쉘 스크립트 구문 오류 메시지 "예기치 않은 파일 끝" 및 "일치하는 '"을 찾는 동안 예기치 않은 EOF가 발생했습니다.

쉘 스크립트 구문 오류 메시지 "예기치 않은 파일 끝" 및 "일치하는 '"을 찾는 동안 예기치 않은 EOF가 발생했습니다.

기본적으로 코드를 실행하면 두 가지 구문 오류가 발생합니다. 다음과 같은:

./Qscript.sh: line 34: unexpected EOF while looking for matching `"'
./Qscript.sh: line 44: syntax error: unexpected end of file

이러한 문제를 해결해도 여전히 다른 오류가 발생합니까?

#!/bin/bash
right=0
wrong=0
question=10
i=0
if [ $# -eq 2 ]
        then
for((i=0; 1<question;)) {
i=$(expr $i +1)
y=$i
echo "${awk "NR==$y" $1)"
        read -p "Enter Answer: " arg1
result=$(awk "NR==$y" $2)

if [ "$arg1" = "$result" ]
        then
right=`expr $right + 1`
else
wrong=`expr $wrong + 1`
fi
)
echo "Number_of_correct_answers " $right
echo "Number_of_wrong_answers " $wrong
fi

if [ $# -eq 3 ]
then
for((i=0; i<question;)) {
i=$(expr $i + 1)
y=$i
ans="$(awk "NR==$y" $2)"
resultfile=$(awk "NR==$y" $3)

if [ "$resultfile" = "$ans" ]
then
right=`expr $right + 1`
else
wrong=`expr $wrong + 1`
fi
)
echo $right
fi

답변1

비판하려면 댓글의 답변 외에도 다음을 수행하는 기술을 시도해 보시기 바랍니다.

  • 변수를 따옴표 안에 넣으세요.

echo "Number_of_correct_answers ${right}"

예를 들어, 이는 $right가 확장되어 경우에 따라 바람직하지 않은 영향을 미치는 문제를 피하는 데 도움이 됩니다.

  • $() 대신 ``를 사용하세요.

$( $() )``를 사용하면 백틱은 /bin/sh와 역호환됩니다. 이는 /bin/bash(예: 이전 Solaris 등)보다 약간 더 유용하지만 동일한 방식으로 중첩할 수는 없습니다 .

  • ""를 중첩하려고 하지 마세요.

가능하다면 awk와 같은 따옴표를 추가해야 할 때 " 대신 '를 사용해 보십시오. 꼭 그렇게 해야 한다면 HEREDOC이 더 적합할 수 있습니다.

관련 정보