Shell遍历文件夹&判断文件中是否存在关键词

背景:现在每天晚上都要压测数十台机器,自动抓取日志的脚本已经写出,但是每次单独点开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文件

《Shell遍历文件夹&判断文件中是否存在关键词》

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、看一下执行结果

《Shell遍历文件夹&判断文件中是否存在关键词》

 只有1号文件夹下的日志里存在fatal关键词,且三次fatal都被找出,脚本运行成功!《Shell遍历文件夹&判断文件中是否存在关键词》

【总结】

shell脚本的条件判断难以理解,建议大家多用python~

    原文作者:柯有Q
    原文地址: https://blog.csdn.net/ckckjsws/article/details/123693022
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞