Shell遍历文件夹&判断文件中是否存在关键词
背景:现在每天晚上都要压测数十台机器,自动抓取日志的脚本已经写出,但是每次单独点开log文件抓取crash,kill,fatal等信息,很是重复和繁琐,于是决定写一个遍历文件夹和判断日志是否存在crash的脚本,话不多说,上代码
#首先逐个遍历文件夹,分别检查其中的log文件 for file in /Users/scofield/Desktop//test0323/* #每次使用时替换这个绝对路径即可 do # if test -f $file # then # echo $file 是文件 # fi if test -d $file then # pwd echo $file 目录下 cd $file # 在这里检查第*个文件里,logcat.log文件有没有crash信息 # 方法一:先写文件后判断 # grep -i fatal logcat.log &>> error.txt # if test -s error.txt # 方法二:一次性判断 if grep -i fatal logcat.log &>> error.txt then echo 存在crash else echo 不存在crash fi # 判断完了之后,返回上层目录 cd .. fi done
1、先看一下我的文件结构
日期=》设备号=》各种log文件
2、首先要做的就是开始遍历文件夹
for file in /Users/scofield/Desktop//test0323/* #每次使用时替换这个绝对路径即可
然后判断这是文件还是文件夹,是文件夹再执行其他操作
【注】-f 表示file,文件类型;-d 表示directory,表示文件夹;if的这两种判断写法都可以
if test -f $file then echo $file 是文件 fi if test -d $file;then echo $file 是目录 fi
3、判断是文件夹后,cd进入该文件夹,检查logcat.log文件是否包含关键词
# 在这里检查第*个文件里,logcat.log文件有没有crash信息 # 方法一:先写文件后判断 # grep -i fatal logcat.log &>> error.txt # if test -s error.txt # 方法二:一次性判断 if grep -i fatal logcat.log &>> error.txt then echo 存在crash else echo 不存在crash fi
【注】grep操作默认区分大小写,grep -i 表示不区分大小写,例如:FATAL,Fatal,fatal都会被找到
这里有两种方法:
第一种是先写文件,然后判断error.txt文件是否为空
第二种是直接判断写文件这个操作是否成功
【注】这里不要添加括号,不要写成如下形式
if [ `grep -i fatal F2_logcat.log &>> error.txt` ]
该方法的写文件操作会按grep照结果执行,但无论文件是否写成功,都会走入else流程,因为这一步操作没有返回值,所以永远都为空!!!
4、看一下执行结果
只有1号文件夹下的日志里存在fatal关键词,且三次fatal都被找出,脚本运行成功!
【总结】
shell脚本的条件判断难以理解,建议大家多用python~