免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: yangfbi008
打印 上一主题 下一主题

shell的grep使用问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-05-20 13:28 |只看该作者

回复 #21 kwokcn 的帖子

正常处理基本都不需要打log

大致log内容是

######shell执行开始时间 #######
****file is not exist  **********
****copy is failure ***********
ERROR 2234: database errros sassd
"update
table
from abc"***************

######shell执行结束时间 #######

论坛徽章:
0
22 [报告]
发表于 2009-05-20 15:16 |只看该作者
如果正常处理不记录log,那用tail -n明显会有问题,例如第一条语句错了,第二三条语句对了,那后面两条的tail -n结果和第一条就是一样的……

用tail -f,tail不退出,后面的处理也麻烦……

提供一个很无赖的方法吧,自己往log里加标签算了:

  1. #!/bin/sh

  2. logfile=xxx.log

  3. for i in $@
  4. do
  5.         t=$(date +%H:%M:%S)"-"$((n++))
  6.         echo $t >> $logfile
  7.         echo "ERROR "$i >> $logfile   # do something ...
  8.         sed -nr '/^'$t'/,$s/^(ERROR [^ ]*).*/\1/p' $logfile
  9. done
复制代码

论坛徽章:
0
23 [报告]
发表于 2009-05-20 15:32 |只看该作者
换成你的案例就是:

  1. while read line
  2. do
  3.       ...

  4.       FLAG=$(date +%H:%M:%S)"-"$((n++))
  5.       echo $t >> ${EXEC_LOG}

  6.       ./exec_sql.sh ${SQL_DEPLOY_PATH}/DELETE_ACCS_LOG_FILE_MGT_BY_SEQUENCE_NUMBER.SQL >> ${EXEC_LOG} 2>&1

  7.       #想在这里判断如果最后一行含有MYSQL的标准ERROR进入if判断   
  8.      if [ -n  "`sed -nr '/^'$FLAG'/,${/ERROR/p}' ${EXEC_LOG}`" ]; then

  9.          let ERROR_NUM+=1
  10.          continue
  11.       fi
  12. done < ${SQL_DEPLOY_PATH}/accs_log_file.list
复制代码

论坛徽章:
0
24 [报告]
发表于 2009-05-21 09:10 |只看该作者

回复 #24 kwokcn 的帖子

非常感谢

我想尝试从其他方面解决


呵呵

论坛徽章:
0
25 [报告]
发表于 2009-05-21 10:46 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP