将上一个脚本生成的日志进行搜索,方便快捷
#!/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