我刚刚加入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
答案 0 :(得分:1)
对于初学者,您没有正确地重定向标准错误。如果将重定向括在引号中,就像使用'2>&1'
一样,实际上只是将字符串作为参数传递。例如:
$ echo foo '>/dev/null'
foo >/dev/null
修复重定向后,您可能还需要确保输出变量包含您认为应该的值。一个常见的错误来源是当其中一个字符串包含换行符或前导/尾随空格时进行字符串比较。
答案 1 :(得分:0)
从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
答案 2 :(得分:0)
在引号中包含重定向不是一个好习惯。更重要的是,你的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