在bash的一行中,当输出/usr/local/bin/monit --version
不完全包含时如何返回退出状态0,而当输出完全不包含时如何返回5.5
退出状态1?
Answers:
! /usr/local/bin/monit --version | grep -q 5.5
(grep
如果找到匹配项,则返回退出状态0,否则返回1。-q
“ quiet”选项告诉它不打印找到的任何匹配项;换句话说,它告诉grep
您唯一需要的是返回值-value。!
开始时会反转整个管道的退出状态。)
编辑添加:或者,如果要在“纯Bash”中执行此操作(而不是调用grep
),则可以编写:
[[ $(/usr/local/bin/monit --version) != *5.5* ]]
([[...]]
在说明的的§3.2.4.2“条件结构”击参考手册。*5.5*
就像在fileglobs:零个或多个字符,再加上5.5
,加零个或多个字符)。
/usr/local/bin/monit --version
失败时的价值?
monit --version
在退出状态为1的情况下显示该值?
monit --version; monit --version | grep -q 5.5
;但是我猜你是要用grep -q
光秃秃的代替grep
吗?在这种情况下,您可以稍微简化为monit --version | grep -q 5.5 || (monit --version; false)
。并且-monit --version
是否打印多行?如果不是,则可以简化为! monit --version | grep -v 5.5
。
[ $(/usr/local/bin/monit --version) == "5.5" ]
eg-1:检查是否成功
[ $(/usr/local/bin/monit --version) == "5.5" ] && echo "OK"
eg-2:检查故障
[ $(/usr/local/bin/monit --version) == "5.5" ] || echo "NOT OK"
或者,仅检查输出是否包含5.5
:
[[ $(/usr/local/bin/monit --version) =~ "5.5" ]] || echo "NOT OK"
[[ "5a5" =~ "5.5" ]] && echo yes
什么都不[[ "5a5" =~ 5.5 ]] && echo yes
打印,但是打印是。引用的版本适用于zsh,但不适用于bash。