#!/bin/bash LANG=en logfile="/opt/TOM/$1/logs/catalina.out" #將當天的英文月、數字日期、數字年做爲變量賦值給d_mdy d_mdy=`date "+%b %d, %Y"` #判斷參數個數 if [ $# -ne 2 ] && [ $# -ne 3 ] then echo "你提供的參數個數不對,請提供2個或者3個參數。例:sh $0 t1 08:01:00 14:00:00" exit 1 fi #判斷第一個參數是否符合要求 if ! echo $1|grep -qE '^t1$|^t2$|^t3$|^t4$' then echo "第一個參數必須是t一、t二、t3或t4" exit 1 fi #判斷時間有效性 judge_time() { date -d "$1" +%s &>/dev/null if [ $? -ne 0 ] then echo "你提供的時間$1格式不正確" exit 1 fi } #將24小時制時間轉換爲12小時 tr_24_12() { date -d "$1" +%r } #判斷提供的時間點是否在日誌中出現 judge_time_in_log() { if ! grep -q "$d_mdy $(tr_24_12 $1)" $logfile then echo "你提供的時間$1在日誌$logfile中未曾出現,請換一個時間點" exit 1 fi } #判斷第2個參數是否合法 judge_time $2 #判斷起始時間點是否出如今日誌裏 judge_time_in_log $2 #若是提供第3個參數 if [ $# -eq 3 ] then #判斷第3個參數是否合法 judge_time $3 #判斷起始時間是否早於結束時間 t1=`date -d "$2" +%s` t2=`date -d "$3" +%s` if [ $t2 -lt $t1 ] then echo "你提供的時間$2比$3要晚,應該把早的時間放到前面" exit fi #判斷提供的結束時間點是否出如今日誌中 judge_time_in_log $3 fi #取起始時間所在行行號 begin_n=`grep -n "$d_mdy $(tr_24_12 $2)" $logfile|head -1|awk -F ':' '{print $1}'` #取結束時間所在行行號,並用sed截取日誌內容 if [ $# -eq 3 ] then n=`grep -n "$d_mdy $(tr_24_12 $3)" $logfile|tail -1|awk -F ':' '{print $1}'` #結束日期所在行的下一行纔是日誌的內容 end_n=$[$n+1] sed -n "$begin_n,$end_n"p $logfile else sed -n "$begin_n,$"p $logfile fi |