20170315 UAT批量,在给零售通知书添加民生LOGO的作业中发现运行报错,但是脚本继续执行,并且调度图上没有反应报错情况。
经排查,发现shell脚本中在使用的while语句用法存在着隐患,具体情况如下:
cat $file|while read LINE
do
...
if [ $? -ne 0 ]
then
...
exit 1
fi
done
echo "hello world" # 循环体退出时,还是会运行此操作,打印出hello world,整个脚本返回0
例如:
在这种while用法中,即使循环体内部退出,虽然中断了循环,但是shell脚本仍会继续执行后续处理,并且整个shell执行完成后返回码为0,这样调度图就捕捉不到错误,很容易被人忽略掉。
对于环境中使用了上述用法的脚本需修改为
while read LINE
do
...
if [ $? -ne 0 ]
then
...
exit 1
fi
done < $file
echo "hello world" # 循环体退出时,还是不会运行此操作,不打印出hello world,整个脚本返回1
例如: