0

使用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
4

5 回答 5

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
于 2012-12-14T15:10:40.413 回答
1

你的意思是这样的:

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

您可以在哪里替换echo 302为任何适当的命令...

等效地:

echo 302 | grep 302 > /dev/null || echo "302 is missed"
于 2012-12-14T15:11:07.513 回答
1

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

if ! `curl -i -s http://www.google.com|grep -q 302` ; then echo "302 is missed" ; fi
于 2012-12-14T15:14:42.790 回答
1

你可以告诉curl只输出 http 代码,如果这是你感兴趣的。

例如:

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

上面使用的 curl 选项是:

  • -I:仅获取 HTTP 标头
  • -s: 沉默的。不显示进度表或错误消息
  • -w: 写什么。在这种情况下,只有 http_code
  • -o: 将输出发送到哪里

因此,您可以将其添加到条件中,如下所示:

[[ $(curl -Is -w %{http_code} -o /dev/null http://stackoverflow.com) -ne 302 ]] && echo "302 is missed"
于 2012-12-14T15:22:29.370 回答
0

我认为这可以解决问题,尽管一如既往,先测试。

perl -e '$pat = shift; print "$pat is missed\n" unless qx{@ARGV} =~ /\Q$pat\E/' 302 curl -i http://www.google.com
于 2012-12-14T15:27:24.603 回答