SHELL脚本-OMC超时补报
2016-09-06 15:54
507 查看
SHELL脚本-OMC超时补报
目录
shell中0,?,$!等的特殊用法sed文件处理工具
shell脚本中常用比较运算符
strftime时间函数
一个补上报文件的小编程
1.shell中0,?,$!等的特殊用法
常用变量说明:$$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 $# 添加到Shell的参数个数 $0 Shell本身的文件名 $1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
2.sed文件处理工具
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
替换一行中的某部分
格式:sed ‘s/要替换的字符串/新的字符串/g’ (要替换的字符串可以用正则表达式)
3.shell脚本中常用比较运算符
-eq 等于-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串
4.strftime时间函数
strftime 非常象 Linux 常用的 date 的命令.strftime 是 C 中 POSIX 的一个功能函数.被包含进了 Perl 中以下是实现获取前一天同一时刻的时间
DATE=`perl -MPOSIX -le 'print strftime "%Y%m%d%H", localtime(time()-86400);'`
5. 一个补上报文件的小编程
#!/bin/sh . ~/.bash_profile ######################################################### #脚本配置区域 START# ######################################################### d_sr_flow_dir=/srbin2/shell/sr_flow_info d_batch_dir=/srbin2/shell/sr_flow_info/batch_dir #以下是实现获取前一天同一时刻的时间 DATE=`perl -MPOSIX -le 'print strftime "%Y%m%d%H", localtime(time()-86400);'` v_date_file=/srbin2/shell/sr_flow_info/data_all_$DATE.file resume_file=/srbin2/shell/sr_flow_info/remsg_all_$DATE.file ###数据库连接字符串 DB_LOGIN="user/passwd@DBName" #目录 V_SRBIN=$SRDIR/bin V_SRLOG=$SRDIR/log v_Msg_SR_Name2=`sqlplus -S /nolog <<EOF conn $DB_LOGIN set pages 0 set trimspool on heading off feedback off echo off verify off recsep off newpage none set serveroutput off set linesize 500 set echo off #以下实现将错误信息写入 ${v_date_file} spool ${v_date_file} SELECT A.SESSION_ID SESSION_ID, A.MESSAGE_SIZE MSG_SIZE, TO_CHAR(A.LOG_TIME, 'YYYYMMDDHH24MISSFF4') a, TO_CHAR(A.LOG_TIME, 'YYYYMMDDHH24MISSFF4') b, C.RESULT_CODE RESULT_CODE, TO_CHAR(B.ALERT_TIME, 'YYYYMMDDHH24MISS') STATE_TIME FROM xxxxx A, xxxxxxx B, xxxxxxxxx C WHERE A.SESSION_ID = B.SESSION_ID AND A.SESSION_ID = C.SESSION_ID AND A.MESSAGE_TYPE = B.MESSAGE_TYPE AND A.PEER_ID = B.PEER_ID AND (B.SCENE_ID = 90010082 OR B.SCENE_ID = 90010042) AND B.SESSION_ID NOT LIKE '%_OMC@371%' AND C.SVCCTX_ID = 'Recharge.Balance@371.ctnbc-bon.net' AND TRUNC(B.ALERT_TIME)= TO_DATE(TO_CHAR(SYSDATE,'YYYY-MM-DD'), 'YYYY-MM-DD') ORDER BY B.ALERT_TIME; spool off exit EOF` if [ `cat ${v_date_file}|wc -l` -gt 0 ] then #获取异常相关信息 while read SID MSG_SIZE MSG_RECEV_TIME MSG_SEND_TIME RESULT_CODE STATE_TIME do #echo $STATE_TIME #将查询出来的相关异常信息替换bc.xml中对应的信息,并写入到ccr_send_all_$DATE.xml文件中,并把该文件放在上传目录 sed "s/sid/$SID/g" $d_sr_flow_dir/bc.xml|sed "s/msi/$MSG_SIZE/g"|sed "s/msrt/$MSG_RECEV_TIME/g"|sed "s/msst/$MSG_SEND_TIME/g"|sed "s/rest/$RESULT_CODE/g"|sed "s/stt/$STATE_TIME/g" > $d_batch_dir/ccr_send_all_$DATE.xml cd $V_SRBIN #判断上传是否成功 vcnt=0 while [ ${vcnt} -lt 4 ] do V_CLIENT="client1 $d_batch_dir/ccr_send_all_$DATE.xml" v_value=`${V_CLIENT}` echo ${v_value} echo "---------------------------------" echo $SID #echo ${v_value}|grep "失败" echo ${v_value}|grep "接收dcc应答包" if [ $? -ne 0 ];then vcnt=` expr ${vcnt} + 1` echo $vcnt #此处说明有正常上报 else break; fi sleep 5 done echo vcnt: ${vcnt} if [ $vcnt -eq 4 ];then v_AlertMsg="【SR-196】超时消息连续5次上报失败,请核查..." echo $v_AlertMsg echo "$SID $MSG_SIZE $MSG_RECEV_TIME $MSG_SEND_TIME $RESULT_CODE $STATE_TIME">>$resume_file #此处使用公司的告警途径进行发送信息 fi done < ${v_date_file} count=`cat ${v_date_file}|wc -l` failcout=`cat ${resume_file}|wc -l` succount=$(($count-$failcout)) echo "当日超时消息上报完成,共上报"${count} 条 v_SuccessMsg="【SR-196】当日超时消息上报完成,共上报 "${count}",成功 ${succount} 条,失败${failcout} 条" #此处使用公司的告警途径进行发送信息 cd ${d_sr_flow_dir} find ./ -mtime +7 -name "data_*"|xargs rm -f #rm -f ${d_batch_dir}/ccr_send* else v_NullMsg="【SR-196】当日无超时消息,无需进行全量上报" #此处使用公司的告警途径进行发送信息 fi
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- Mootools 1.2教程 函数
- autoit InputBox 函数
- VBS脚本写的Windows硬件检测工具分享
- 文件遍历排序函数
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- Oracle数据库执行脚本常用命令小结
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观