将上一个脚本生成的日志进行搜索,方便快捷

#!/bin/bash
#Author:ldy5213@163.com
#输入指定的日期查询备份生成的日志对应日期的内容
lj='/var/log/'
#定义变量lj为路径
echo -en '正在检查日志文件'
ky=`find "$lj" -type f -name *.log -user yuback`
#搜索符合条件的日志文件
if [ -z "$ky" ];then
sleep 2
#因为这样搜索很快,直接显示感觉不友好,因此等待2秒
echo -e '\t\t\t\t\033[31;1m[ERROR]\033[0m' >&2
exit 5
#如果搜索到的结果为0,则提示错误,并返回5
else
sleep 1
echo -e '\t\t\t\t\033[32;1m[OK]\033[0m'
#搜索结果不为0,则提示成功,继续运行
fi
if [ -z "$1" ];then
#这个脚本可以在后面加上一个选项,格式和下面相同,如果不加在执行时也会提示
echo -en '请输入查询日期(如\033[36m20190101\033[0m),输入q退出:'
#read不能添加颜色,使用echo添加颜色不换行,接上read就可以做到有颜色又可以获取变量
read p
else 
p=$1
fi
while :
do
[ "$p" == "q" ] && exit
if [[ "$p" =~ ^[0-9]{8}$ ]];then
sr=`echo "$p" | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})/\1年\2月\3日/'`
#将输入的数字变更为日期,例如20190101替换为2019年01月01日,之所以替换是因为日志当中写的就是xxxx年xx月xx日
echo "$sr" | awk -F[年月日] 'BEGIN{$1=$1+0;$2=$2+0;$3=$3+0}{if($1>=1900&&$1<=3000&&$2>=1&&$2<=12&&$3>=1&&$3<=31){exit 0}else{exit 1}}'
if [ $? -eq 0 ];then
dq=`date +"%Y%m%d"`
#获取当前时间
if [ "$p" -gt "$dq" ];then
echo -en "查询日期\033[31m不能大于当前日期\033[0m当前日期为\033[36m$dq\033[0m,请重新输入,输入q退出:"
read p
continue
else
break
fi
fi
fi
echo -en '输入内容不正确,请重新输入查询日期(如\033[36m20190101\033[0m),输入q退出:'
read p
done
#判断输入的内容是否符合要求
jg="$jg"`awk "/$sr/" $ky`
#所有符合条件的内容
sl=`echo "$jg" | awk 'BEGIN{x=0}{x++}END{print x}'`
#统计有多少条符合条件的内容,管道符后的可以替换为 wc -l
if [ ! -z $jg ];then
if [ "$sl" -gt 10 ];then
echo -e "查询到的结果有\033[34m$sl\033[0m个,完全显示会过长影响阅读。"
while :
do
echo -en "显示开头几行输入t+数字,如:\033[36mt5\033[0m,显示后几行输入h+数字,如:\033[36mh3\033[0m,完全显示(all),退出(q):"
read h
if [ -z "$h" ];then
echo -e '\033[31m请输入内容\033[0m'
elif [[ "$h" =~ ^t[0-9]{1,} ]];then
zf=${h#*t}
 if [ "$zf" -gt "$sl" ];then
echo "输入的数字大于搜索的结果,查询到的结果有${sl}个"
elif [ "$zf" -lt 1 ];then
echo -e '\033[31m请输入非零的整数\033[0m'
else
echo "$jg" | head -n $zf
exit
fi
elif  [[ "$h" =~ ^h[0-9]{1,} ]];then
            zf=${h#*h}
            if [ "$zf" -gt "$sl" ];then
                echo "输入的数字大于搜索的结果,查询到的结果有${sl}个"
            elif [ "$zf" -lt 1 ];then
            echo -e '\033[31m请输入非零的整数\033[0m'
            else
                echo "$jg" | tail -n $zf
                exit
            fi
        elif [ "$h" == "q" ]; then
        exit
        elif [ "$h" == "all" ];then
        echo "$jg"
        else
        echo -e '\033[31m请输入正确的内容\033[0m'
        fi
    done
else
echo $jg
fi
else
echo -e '\033[31;1m没有找到符合条件的记录\033[0m' >&2
exit 4
fi