第一个错误消息(line 11: unexpected EOF while looking for matching `"')指出在第 11 行上有错误,但是看过这一行之后,并没有发现任何错误。再看看第 9 行。echo 后面的字符串的末尾缺少一个双引号(")。这个示例很好地说明了在进行调试时为什么必须查看整个脚本。错误消息中显示的行号不一定是出现错误的实际位置。报告第 11 行有错误是因为第 9 行用双引号标出一个字符串的开头,但是这个字符串直到第 11 行还没有结束。要想纠正这个错误,应该在第 9 行末尾添加双引号。
其他一些问题也会显示为错误。在第 11 行上,变量值 _X 后面是一个用红色突出显示的后圆括号())。这是 Vim 替您做出的判断,它指出这里有错误。这里用一个前花括号({)标出了变量值 _X 的开头,但是没有用后花括号(})结束。只需把 ) 改为 },就能够纠正这个错误。
到目前为止,已经纠正了两个错误。再次运行这个脚本,看看会发生什么:
./make_errors: line 12: syntax error near unexpected token `fi'
./make_errors: line 12: ` fi'
还有另一个错误。错误消息指出问题出现在第 12 行上,但是这一行只有一个用来结束 if 语句的 fi。这有什么错呢?请牢记前一个错误的情况。并非所有错误都源自 shell 所报告的行上。shell 仅仅报告发生错误的位置,但是错误的根源可能出现在这个位置之前。对于这个小脚本,可以很有把握地猜测错误可能出现在实际的 if 语句中。回忆一下基本的脚本编程逻辑:if 语句由 if、then 和 fi 组成。看看这个条件语句,可以看出缺少了 then。只需在脚本中添加 then。完成之后,这个脚本应该类似于清单 11。
清单 11. 纠正清单 10 中的错误之后的脚本
标签: