2012-12-14 38 views
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

回答

1

您可以使用silented作爲測試curl|grep結果:

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

別的地方這正是我需要的。 Thx – Ryan

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 
+0

可能要'頭-n 1'避免採摘「302」,在響應 – ikegami

1

你的意思是這樣的如下:

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

在那裏你可以用任何適當的命令替換echo 302 ...

等效:

echo 302 | grep 302 > /dev/null || echo "302 is missed" 
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" 
+0

最佳答案+1或者*爲什麼rtfm可能是一個好主意*! –

0

我認爲這會做的伎倆,雖然一如既往,先測試。

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