如果命令输出缺少特定字符串,则发出警报

时间:2012-12-14 15:03:25

标签: python perl bash shell

使用bash script/python/perl script,是否可以显示没有字符串的命令的输出,例如

curl -i http://www.google.com


HTTP/1.1 302 Found
Location: http://www.google.com.hk/
Cache-Control: private
Content-Type: text/html; charset=UTF-8

我想做的是:

  1. 如果输出包含302,则不打印任何内容
  2. 否则,请打印302 is missed

5 个答案:

答案 0 :(得分:1)

$ grep -q 302 << EOF || echo "302 is missed"
> HTTP/1.1 302 Found
> Location: http://www.google.com.hk/
> Cache-Control: private
> Content-Type: text/html; charset=UTF-8
> EOF
$ grep -q 302 << EOF || echo "302 is missed"
> HTTP/1.1 312 Found
> Location: http://www.google.com.hk/
> Cache-Control: private
> Content-Type: text/html; charset=UTF-8
> EOF
302 is missed

答案 1 :(得分:1)

您的意思是以下内容:

if [ ! `echo 302 | grep 302` ] ; then echo 302 is missed; fi

您可以使用任何适当的命令替换echo 302 ......

等效:

echo 302 | grep 302 > /dev/null || echo "302 is missed"

答案 2 :(得分:1)

您可以使用curl|grep静默作为测试的结果:

if ! `curl -i -s http://www.google.com|grep -q 302` ; then echo "302 is missed" ; fi

答案 3 :(得分:1)

您可以告诉curl仅输出http代码(如果您感兴趣的话)。

例如:

$ curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com
200

上面使用的卷曲选项是:

  • -I:仅提取HTTP标头
  • -s:沉默。不要表现出进步 计量表或错误消息
  • -w:要写出什么。在这种情况下,只 http_code
  • -o:将输出发送到
  • 的位置

因此您可以将其添加到以下条件中:

[[ $(curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com) -ne 302 ]] && echo "302 is missed"

答案 4 :(得分:0)

我认为这可以解决问题,但是一如既往地先测试。

perl -e '$pat = shift; print "$pat is missed\n" unless qx{@ARGV} =~ /\Q$pat\E/' 302 curl -i http://www.google.com