在日志文件中搜索 - 退出代码

use*_*r_0 7 shell command-line grep control-m

我有一些遗留软件,我需要在Control-M下自动化.这些工作属于Windows 2008R2.

如果它们运行正常,这些作业的退出代码为0,但如果它们可以管理某些错误,则它们也会有.当特定字符串在日志中时,我需要发出警报.
该字符串不在可执行文件的输出中.

我为此实施了另一项工作.它会搜索文件中的字符串,并在"On Do Actions"中搜索该语句.

要在输出中使用语句,我认为使用像grep这样的东西.我用了:

在这两种情况下,我都有相同的情况:

  • 如果找到了字符串,那么每一件事都可以
  • 如果找不到文件或无法打开文件,grep或findstr将返回退出代码= 1.这没关系,因为作业必须引发错误.

但问题是:当在文件中找不到字符串时,grep和findstr都有一个返回码= 1.

如果文件无法打开以及一切运行正常但是找不到日志中的sring,我如何区分这些情况?

ran*_*mir 3

您应该能够使用grep的退出状态来检测失败的原因。根据POSIXgrep文档,退出状态部分:

EXIT STATUS

   The following exit values shall be returned:

   0    One or more lines were selected.
   1    No lines were selected.
   >1   An error occurred.
Run Code Online (Sandbox Code Playgroud)

GNUgrep类似(一致,但更具体):

通常,如果选择了一行,则退出状态为 0;如果没有选择行,则退出状态为 1;如果发生错误,则退出状态为 2。[...] 其他 grep 实现可能会因错误而退出且状态大于 2。

例如,在 中bash,您可以使用case该命令来处理多个分支,如下所示:

#!/bin/bash

# search for error code in file
grep code file

# store the exit status in variable err
err=$?

# test several cases
case $err in
    0) echo All good.;;
    1) echo Code not found.;;
    *) echo Error reading from file.;;
esac
Run Code Online (Sandbox Code Playgroud)