应公司首长的需求最近要对opgw日志进行监控,发现的话即发送报错到手机上。

#!/bin/bash
killall opgw_error
 
JAVA_HOME=/ceno/product/platform/jdk
JAVA_CMD=$JAVA_HOME/bin/java
SIM_HOME=/home/ares/simulator
SIM_LIB=$SIM_HOME/lib
CP=$SIM_LIB/ceno-base.jar:$SIM_LIB/framework.jar
CP=$CP:$SIM_LIB/ceno-modules.jar:$SIM_LIB/commons.jar
CP=$CP:$SIM_LIB/smg.jar:$SIM_LIB/smgsim.jar
if [ -f /tmp/old_count.log ];then   //如果有则不对其文件进行更改
        :
else
        echo 0 > /tmp/old_count.log  //如果没有则执行这步
fi
OLD_COUNT=`more /tmp/old_count.log`
NEW_COUNT=`grep -i "message window full" /ceno/product/masc/log/2009-11-25/opgw.log |wc -l`
if [[ $NEW_COUNT -gt $OLD_COUNT ]];then
        echo `date "+%Y-%m-%d %H:%m:%S"`" => $NEW_COUNT"
        echo $NEW_COUNT > /tmp/old_count.log
$JAVA_CMD -classpath $CP:$CLASSPATH naisa.simulator.smg.SmsSimulator $SIM_HOME/smgsim.conf $* >>/tmp/bb.txt
fi
 
从中总结出一些问题
第一本来if [ $NEW_COUNT -gt $OLD_COUNT ];then
我是这么写的 可是实际操作时发生了问题
是因为如果变量STATUS值为空,那么就成了 [ -gt  ],显然 [ 和]不相等并且缺少了 [ 符号,所以报了这样的错误。当然不总是出错,如果变量值不为空,程序就正常了,所以这样的错误还是很隐蔽的。或者用下面的方法也能避免这种错 误:if [  $NEW_COUNTx  -gt  $OLD_COUNT x ]; then     操作当然,x也可以是其他字符。顺便提一点,shell中有没有双引号在很多情况下是一致的。