背景:现在每天晚上都要压测数十台机器,自动抓取日志的脚本已经写出,但是每次单独点开log文件抓取crash,kill,fatal等信息,很是重复和繁琐,于是决定写一个遍历文件夹和判断日志是否存在crash的脚本,话不多说,上代码
#首先逐个遍历文件夹,分别检查其中的log文件
for file in /Users/scofield/Desktop/CSDN/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/CSDN/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~