Shell 脚本语法错误消息“意外的文件结尾”和“查找匹配的‘”’时出现意外的 EOF

Shell 脚本语法错误消息“意外的文件结尾”和“查找匹配的‘”’时出现意外的 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 可能更合适。

相关内容