シェルスクリプト構文エラーメッセージ「予期しないファイルの終わり」と「一致する」を検索中に予期しないEOFが発生しました。

シェルスクリプト構文エラーメッセージ「予期しないファイルの終わり」と「一致する」を検索中に予期しないEOFが発生しました。

デフォルトでは、コードを実行すると2つの構文エラーが発生します。次のように:

./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などの引用符を追加する必要がある場合は、「代わりに」を使用してみてください。

関連情報