脚本错误以从日志中提取数据

时间:2018-12-19 20:29:57

标签: shell logging extract

在运行新的Shell脚本时,我不断收到以下错误消息。我正在尝试从日志文件中提取错误,以在导致问题之前捕获它们。

:找不到[没有这样的文件或目录] :找不到[没有这样的文件或目录] LogErrors.sh:第5行:第14行的语法错误:if' unmatched : not found [No such file or directory] : not found [No such file or directory] LogErrors.sh: line 5: syntax error at line 14:如果不匹配 :找不到[没有这样的文件或目录] :找不到[没有这样的文件或目录] LogErrors.sh:第5行:第14行的语法错误:“ while”不匹配

Code:


#!/bin/ksh

TOM1=/ap/mvr/servers/tomcat1/logs/
TOM2=/ap/mvr/servers/tomcat2/logs/

find $TOM1 $TOM2 -type f -name "mvr-gateway.log" | while read file
do
LOGERRORS=$(grep -B2 -A3 'WARN|ERROR|CRIT' $file)
if[[! -z $LOGERRORS]]
then
    echo "Errors in $file: $LOGERRORS" >> LogErrors.txt
fi
done

1 个答案:

答案 0 :(得分:0)

您的语法似乎不适用于ksh,而您正在对grep使用egrep语法。

我相信这会满足您的需求:

#!/bin/ksh
TOM1=/ap/mvr/servers/tomcat1/logs/
TOM2=/ap/mvr/servers/tomcat2/logs/

find $TOM1 $TOM2 -type f -name "mvr-gateway.log" |
while read file
do
    LOGERRORS=$(egrep -B2 -A3 'WARN|ERROR|CRIT' $file)
    if [[ ! -z $LOGERRORS ]]
    then
        echo "Errors in $file: $LOGERRORS" >> LogErrors.txt
    fi
done

同时,您可能希望从egrep的输出中读取每行中的另一行while read linein(其输出从egrep中传递)。