94

在bash的一行中,当/usr/local/bin/monit--版本不完全包含5.5退出时状态为1?

3个答案

重置为默认值
127
! /usr/local/bin/monit--版本|grep-q 5.5

(格雷普如果找到匹配项,则返回exit-status 0,否则返回1。这个-q个选项“quiet”告诉它不要打印它找到的任何匹配项;换句话说,它告诉我们格雷普你唯一想要的是它的回报值。这个!开始时反转整个管道的出口状态。)

已编辑以添加:或者,如果您想在“纯Bash”中执行此操作(而不是调用格雷普),您可以写:

[[$(/usr/local/bin/monit--版本)!=*5.5*]]

([[...]]在中进行了解释§3.2.4.2“条件结构”Bash参考手册.*5.5*就像在fileglobs中一样:零个或多个字符,加上5.5,加上零个或多个字符。)

8
  • 有什么可以呼应/usr/local/bin/monit--版本当它也失败了? 评论 2017年10月24日20:08
  • @乔舒亚·平特:请澄清一下——你所说的“当它失败时”是什么意思?(哪个方向是“失败”?)
    – 鲁克
    评论 2017年10月24日20:28
  • @ruakh当出口代码为1时,它能显示monit--版本值,同时仍以1的状态退出? 评论 2017年10月24日20:55
  • @JoshuaPinter:出口代码格雷普或整个命令的退出代码?(由于!,这些是相反的。)
    – 鲁克
    评论 2017年10月25日0:30
  • 1
    @乔舒亚·平特:这似乎相当于monit——版本;monit--版本|grep-q 5.5; 但我猜你是想用希腊语-q而不是光着身子格雷普? 在这种情况下,您可以稍微简化为monit--版本|grep-q 5.5||(monit--版本;false).而且--确实monit--版本打印过多行吗?如果没有,那么可以简化为! monit--版本|grep-v 5.5.
    – 鲁克
    评论 2017年10月25日7:59
34
[$(/usr/local/bin/monit--版本)==“5.5”]

eg-1:检查成功

[$(/usr/local/bin/monit--version)==“5.5”]&&echo“确定”

eg-2:检查故障

[$(/usr/local/bin/monit--version)==“5.5”]||echo“不正常”

或者,只检查输出是否包含5.5:

[[$(/usr/local/bin/monit--version)=~“5.5”]]||echo“不正常”
4
  • “5.5”将是较大数量输出的一部分。 评论 2012年9月11日18:36
  • @perreal-您不能在bash中引用regex,它使其成为文字字符串而不是regex。(引用在一些旧版本的bash中有效,但被修复为一个bug)。
    – 约旦
    评论 2012年9月12日0:36
  • @乔丹,这不对。如果你不引用5.5,它也会匹配5a5。引号使点成为字符串。 评论 2018年10月25日7:18
  • 1
    @我只是测试了一下。[[“5a5”=~“5.5”]&&echo是只打印[[“5a5”=~5.5]]&&echo是打印“是”。引用的版本在zsh中有效,但在bash中无效。
    – 约旦
    评论 2018年10月25日15:35
7

测试grep的返回值:

sudo服务xyz状态| grep“not”&>/dev/null如果[$?==0];然后echo“随你所愿”fi(菲涅耳)

我建议使用cron,它可以很好地与SALT堆栈配合使用

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.