检查日志的小脚本
时间:2008-08-13 来源:tchmuzi
#!/bin/ksh
echo "Please input begdate[for example:20080201]:\c"
read begdate
echo "Please input enddate[for example:20080210]:\c"
read enddate
###################################
#
#功能:取一年的某一月有多少天
#输入参数:
# 1. yy年份
# 2. mm月份
#输出:
# 一个月的天数
# -1 不成功
###################################
get_days()
{
yy_tmp=$1
mm_tmp=`expr $2 + 0`
if [ $? -ge 2 ]; then
return -1
fi case $mm_tmp in
1|3|5|7|8|10|12) ret_days=31
;;
4|6|9|11) ret_days=30
;;
2) ret_days=28
;;
esac if [ $mm_tmp -eq 2 ]; then
yy_tmp1=`expr $yy_tmp / 4 \* 4`
if [ $? -ge 2 ]; then
return -1
fi yy_tmp2=`expr $yy_tmp / 100 \* 100`
if [ $? -ge 2 ]; then
return -1
fi yy_tmp3=`expr $yy_tmp / 400 \* 400`
if [ $? -ge 2 ]; then
return -1
fi if [ $yy_tmp1 -eq $yy_tmp ]; then
if [ $yy_tmp2 -eq $yy_tmp ]; then
if [ $yy_tmp3 -eq $yy_tmp ]; then
ret_days=29
fi
else
ret_days=29
fi
fi
fi return $ret_days
}
###############################################
#
#功能:计算一个日期加或减一个天数后得到的新日期
#输入参数:
# 1.日期
# 2.要变化的天数
#输出:
# 变化后的日期
# -1 失败
# 0 :表示增量为零
################################################
day_calculate()
{
date1=$1
datemodi=$2 #若日期增量为0,则返回输入日期
if [ $datemodi -eq 0 ]; then
ret_date=$date1
return 0
fi
yy=`echo $date1 | cut -b 1-4`
if [ $? -ne 0 ]; then
return -1
fi mm=`echo $date1 | cut -b 5-6`
if [ $? -ne 0 ]; then
return -1
fi dd=`echo $date1 | cut -b 7-8`
if [ $? -ne 0 ]; then
return -1
fi
dd1=`expr $dd + $datemodi`
if [ $? -ge 2 ] ; then
return -1
fi #小于零和大于零的处理
if [ $datemodi -lt 0 ] ; then
while [ 0 -eq 0 ]
do
if [ $dd1 -ge 1 ] ; then
break
fi
mm=`expr $mm - 1`
if [ $? -ge 2 ] ; then
return -1
fi if [ $mm -le 0 ] ; then
mm=`expr $mm + 12`
if [ $? -ge 2 ]; then
return -1
fi yy=`expr $yy - 1`
if [ $? -ge 2 ] ; then
return -1
fi
fi
get_days $yy $mm
daysofthismon=$?
if [ $daysofthismon -lt 0 ] ; then
return -1
fi
dd1=`expr $dd1 + $daysofthismon`
if [ $? -ge 2 ] ; then
return -1
fi
done
else
while [ 0 -eq 0 ]
do
get_days $yy $mm
daysofthismon=$?
if [ $daysofthismon -lt 0 ] ; then
return -1
fi if [ $dd1 -le $daysofthismon ] ; then
break
fi dd1=`expr $dd1 - $daysofthismon`
if [ $? -ge 2 ] ; then
return -1
fi
mm=`expr $mm + 1`
if [ $mm -gt 12 ] ; then
mm=`expr $mm - 12`
yy=`expr $yy + 1`
fi
done
fi mm=`expr $mm + 0`
if [ $? -ge 2 ] ; then
return -1
fi dd1=`expr $dd1 + 0`
if [ $? -ge 2 ] ; then
return -1
fi if [ $mm -le 9 ] ; then
ret_date=${yy}0${mm}
else
ret_date=${yy}${mm}
fi
if [ $dd1 -le 9 ] ; then
ret_date=${ret_date}0${dd1}
else
ret_date=${ret_date}${dd1}
fi
}
PN=`ps -ef|grep ckmml.sh |grep -v grep |wc -l`
#echo ${PN} #如果没有重复实例,正常执行
if [ $PN -eq 1 ];then
echo "Begin to check ..."
#如果已经有个实例在运行,退出本实例
else
echo "+=====================+"
echo "The Script is running !"
echo "+========exit=========+"
exit 1;
fi
if [ -f "riqi_t.unl" ];then
rm -rf riqi_t.unl
fi
touch riqi_t.unl
if [ -f "riqi.unl" ];then
rm -rf riqi.unl
fi
touch riqi.unl
if [ -f "tmpdir.unl" ];then
rm -rf tmpdir.unl
fi
touch tmpdir.unl
echo ${enddate}>>riqi_t.unl
while [ ! ${enddate} -eq ${begdate} ]; do
#echo ${enddate}
day_calculate ${enddate} -1
enddate=$ret_date
echo ${enddate}>>riqi_t.unl
done
cat riqi_t.unl | sort >> riqi.unl
rm -rf riqi_t.unl
rq=$HOME/riqi.unl
while read riqi other
do
ls -l /tellin/smpmml/sms_run/log/oplog|grep ^d |grep ${riqi}|awk -F " " '{print $9}'>>tmpdir.unl
done < ${rq}
echo "+-----------The result file --> ./${1}.log------------+"
workdir=$HOME/tmpdir.unl
while read sdir other
do
cd ~smpmml/sms_run/log/oplog/${sdir}
#echo "+----------------------\toplog/${sdir}\t----------------------+" |tee -a $HOME/${1}.log
#printf "+----------------------\toplog/${sdir}\t----------------------+\n" |tee -a $HOME/${1}.log
echo "+----------------------oplog/\c"
printf "%-10s" ${sdir}
echo "----------------------+"
gunzip -c *log.gz |grep ${1} |tee -a $HOME/${1}.log
done < ${workdir}
echo "+----------------------------Over----------------------------+"
echo "Please input begdate[for example:20080201]:\c"
read begdate
echo "Please input enddate[for example:20080210]:\c"
read enddate
###################################
#
#功能:取一年的某一月有多少天
#输入参数:
# 1. yy年份
# 2. mm月份
#输出:
# 一个月的天数
# -1 不成功
###################################
get_days()
{
yy_tmp=$1
mm_tmp=`expr $2 + 0`
if [ $? -ge 2 ]; then
return -1
fi case $mm_tmp in
1|3|5|7|8|10|12) ret_days=31
;;
4|6|9|11) ret_days=30
;;
2) ret_days=28
;;
esac if [ $mm_tmp -eq 2 ]; then
yy_tmp1=`expr $yy_tmp / 4 \* 4`
if [ $? -ge 2 ]; then
return -1
fi yy_tmp2=`expr $yy_tmp / 100 \* 100`
if [ $? -ge 2 ]; then
return -1
fi yy_tmp3=`expr $yy_tmp / 400 \* 400`
if [ $? -ge 2 ]; then
return -1
fi if [ $yy_tmp1 -eq $yy_tmp ]; then
if [ $yy_tmp2 -eq $yy_tmp ]; then
if [ $yy_tmp3 -eq $yy_tmp ]; then
ret_days=29
fi
else
ret_days=29
fi
fi
fi return $ret_days
}
###############################################
#
#功能:计算一个日期加或减一个天数后得到的新日期
#输入参数:
# 1.日期
# 2.要变化的天数
#输出:
# 变化后的日期
# -1 失败
# 0 :表示增量为零
################################################
day_calculate()
{
date1=$1
datemodi=$2 #若日期增量为0,则返回输入日期
if [ $datemodi -eq 0 ]; then
ret_date=$date1
return 0
fi
yy=`echo $date1 | cut -b 1-4`
if [ $? -ne 0 ]; then
return -1
fi mm=`echo $date1 | cut -b 5-6`
if [ $? -ne 0 ]; then
return -1
fi dd=`echo $date1 | cut -b 7-8`
if [ $? -ne 0 ]; then
return -1
fi
dd1=`expr $dd + $datemodi`
if [ $? -ge 2 ] ; then
return -1
fi #小于零和大于零的处理
if [ $datemodi -lt 0 ] ; then
while [ 0 -eq 0 ]
do
if [ $dd1 -ge 1 ] ; then
break
fi
mm=`expr $mm - 1`
if [ $? -ge 2 ] ; then
return -1
fi if [ $mm -le 0 ] ; then
mm=`expr $mm + 12`
if [ $? -ge 2 ]; then
return -1
fi yy=`expr $yy - 1`
if [ $? -ge 2 ] ; then
return -1
fi
fi
get_days $yy $mm
daysofthismon=$?
if [ $daysofthismon -lt 0 ] ; then
return -1
fi
dd1=`expr $dd1 + $daysofthismon`
if [ $? -ge 2 ] ; then
return -1
fi
done
else
while [ 0 -eq 0 ]
do
get_days $yy $mm
daysofthismon=$?
if [ $daysofthismon -lt 0 ] ; then
return -1
fi if [ $dd1 -le $daysofthismon ] ; then
break
fi dd1=`expr $dd1 - $daysofthismon`
if [ $? -ge 2 ] ; then
return -1
fi
mm=`expr $mm + 1`
if [ $mm -gt 12 ] ; then
mm=`expr $mm - 12`
yy=`expr $yy + 1`
fi
done
fi mm=`expr $mm + 0`
if [ $? -ge 2 ] ; then
return -1
fi dd1=`expr $dd1 + 0`
if [ $? -ge 2 ] ; then
return -1
fi if [ $mm -le 9 ] ; then
ret_date=${yy}0${mm}
else
ret_date=${yy}${mm}
fi
if [ $dd1 -le 9 ] ; then
ret_date=${ret_date}0${dd1}
else
ret_date=${ret_date}${dd1}
fi
}
PN=`ps -ef|grep ckmml.sh |grep -v grep |wc -l`
#echo ${PN} #如果没有重复实例,正常执行
if [ $PN -eq 1 ];then
echo "Begin to check ..."
#如果已经有个实例在运行,退出本实例
else
echo "+=====================+"
echo "The Script is running !"
echo "+========exit=========+"
exit 1;
fi
if [ -f "riqi_t.unl" ];then
rm -rf riqi_t.unl
fi
touch riqi_t.unl
if [ -f "riqi.unl" ];then
rm -rf riqi.unl
fi
touch riqi.unl
if [ -f "tmpdir.unl" ];then
rm -rf tmpdir.unl
fi
touch tmpdir.unl
echo ${enddate}>>riqi_t.unl
while [ ! ${enddate} -eq ${begdate} ]; do
#echo ${enddate}
day_calculate ${enddate} -1
enddate=$ret_date
echo ${enddate}>>riqi_t.unl
done
cat riqi_t.unl | sort >> riqi.unl
rm -rf riqi_t.unl
rq=$HOME/riqi.unl
while read riqi other
do
ls -l /tellin/smpmml/sms_run/log/oplog|grep ^d |grep ${riqi}|awk -F " " '{print $9}'>>tmpdir.unl
done < ${rq}
echo "+-----------The result file --> ./${1}.log------------+"
workdir=$HOME/tmpdir.unl
while read sdir other
do
cd ~smpmml/sms_run/log/oplog/${sdir}
#echo "+----------------------\toplog/${sdir}\t----------------------+" |tee -a $HOME/${1}.log
#printf "+----------------------\toplog/${sdir}\t----------------------+\n" |tee -a $HOME/${1}.log
echo "+----------------------oplog/\c"
printf "%-10s" ${sdir}
echo "----------------------+"
gunzip -c *log.gz |grep ${1} |tee -a $HOME/${1}.log
done < ${workdir}
echo "+----------------------------Over----------------------------+"
相关阅读 更多 +