这里有一个坑(至少对于我来说):

报错信息中的出错行,并不代表真实脚本中的出错行.

 

jenkins执行的shell内容如下:

第1行echo 1个字符串,少1个双隐号

echo "233342
echo "12312"
echo "34"

执行jenkins报错如下:

/usr/local/tomcat/apache-tomcat-8.5.40/temp/jenkins5082891078041588552.sh:行4: 寻找匹配的 `"' 是遇到了未预期的文件结束符
Build step '执行 shell' marked build as failure
Finished: FAILURE

可以看到错信息显示的是行4,但是并没有行4.我是这样理解的,jenkins(bash)发现 第1行缺少双隐号之后,一直寻找到了shell脚本末尾,也没有找到匹配的双隐号,所以这里的行4,指的是,我已经找到文件末尾了,都没有匹配到双隐号,你这个脚本是有问题的,你自己去找到底是哪一行双隐号少了吧.

按照我以前调试python程序的经验,编译器执行出一段代码,代码出现语法错误时,编译器会抛出具体位置.(大部分情况下)
但是显示这个经验不适用于调试shelle脚本.

所以下次执行shell遇到这个问题,就仔仔细细去检查有双隐号的代码吧

12-13 22:35