【问题标题】:Capture bash output and compare it to a line of text捕获 bash 输出并将其与一行文本进行比较
【发布时间】:2016-10-20 11:45:37
【问题描述】:

我刚刚加入 Stackoverflow,因为我需要一些帮助。我一直在对我们的 Red Hat 服务器进行一些基本管理,因为我们在其上运行 Nagios,但有人要求我编写一些脚本来监控我们的 SAP 环境。

我已经修改了 SAP 服务器和一个 CCMS 插件来重新调整我们需要的输出:

EU_PUT 历史 = EU_PUT | 00101401 | Afgebroken |,开始于 2016-10-20,00:10:18 终止于 2016-10-20,00:10:18

我想使用捕获的输出 (^) 并检查它是否包含单词“Beënd”。如果是,则意味着作业成功结束,如果不是,则意味着作业失败(无论失败状态如何)。无论我做什么,脚本都不会接受输出。运行以下脚本时输出成功显示,但比较不起作用。

我做错了什么?任何帮助将不胜感激!

亲切的问候, 丹尼斯·兰斯

   #!/bin/bash
    T1="*Beënd*"

    #For Nagios reporting purposes:
    unknown="0"
    ok="1"
    warning="2"
    critical="3"

    output=$(/usr/local/nagios/libexec/check_sap job_eu_put lnx '2>&1')

    if [[ "$output" == "$T1" ]]
        then
            echo $output
            exit $ok
        else
            echo $output
            exit $critical

    fi

【问题讨论】:

  • 你为什么将重定向用引号括起来?你有没有看过 output 在匹配失败时真正包含的内容?

标签: bash output comparison nagios


【解决方案1】:

对于初学者,您没有正确重定向标准错误。当您将重定向括在引号中时,就像使用'2>&1' 一样,您实际上只是将一个字符串作为参数传递。例如:

$ echo foo '>/dev/null'
foo >/dev/null

修复重定向后,您可能还需要确保 output 变量包含您认为应该包含的值。一个常见的错误来源是当其中一个字符串包含换行符或前导/尾随空格时进行字符串比较。

【讨论】:

  • 感谢您的提示,我已在脚本中更改了该提示。这与来自 jmd_dk 的评论一起使脚本工作。谢谢!
【解决方案2】:

用引号括起重定向不是一个好习惯。更重要的是,您的 if 语句 [[ "$output" == "$T1" ]] 进行了严格比较,它不会询问 $T1 是否是 $output 的子字符串。您应该为此使用[[ "$output" == *"$T1"* ]]。也就是说,* 不应放在引号内,就像您在定义 T1 变量时所做的那样:

#!/bin/bash
T1="Beënd"

#For Nagios reporting purposes:
unknown="0"
ok="1"
warning="2"
critical="3"

output=$(/usr/local/nagios/libexec/check_sap job_eu_put lnx '2>&1')

if [[ "$output" == *"$T1"* ]]
    then
        echo $output
        exit $ok
    else
        echo $output
        exit $critical

fi

【讨论】:

  • 谢谢!这非常有效。我会将网址和您的提示保存在我们的文档中,谢谢。
【解决方案3】:

从 2>&1 中删除 stderr 到 stdout 的重定向引号

  output=$(blah 2>&1)
  echo $output
  No command 'blah' found, did you mean: Command 'blam' from package 'blam' (universe) blah: command not found

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多