使用bash脚本比较get-ccurl请求头



我想创建一个比较特定get请求头值的脚本。

到目前为止,脚本内容是这样的:

var=$(curl -I -s http://myhost.local | grep X-Magento-Cache-Debug | awk {'print $2'})
if [ "$var" = "HIT" ]; then
echo "OK"
else    
echo "NOK"
exit 2
fi

因此,使用这个脚本,我想比较X-Magento-Cache-Debug的值。问题是,不管值是多少,脚本总是打印NOK

这里的字符串比较似乎失败了,尽管当我echovar值时,我得到了所需的内容。

任何想法都会有帮助,谢谢。

您正在比较文字字符串var和文字字符串HIT。这种比较总是错误的。

如果要比较变量var内容是否相等,则应为

[ "$var"  =  HIT ]

但是,如果管道的输出不仅仅由单词HIT组成,而是由更多的文本组成,那么这将是错误的。

如果您想知道变量的内容是否在某个地方包含子字符串HIT,这将是

[[ $var == *HIT* ]]

另一种可能性是让grep来做这项工作:

if curl -I -s http://myhost.local | grep X-Magento-Cache-Debug | grep -wF HIT 
then
....
fi

备选方案1:

直接在awk:中测试您的状况

curl -sI http://www.stackoverflow.com 
| awk '/Connection/ { if ($2 ~ /keep-alive/) { exit 0; } } END { exit 1; }'

备选方案2:

使用[[ =~ ]]使用更安全、更灵活的模式匹配

$ conn=$(curl -sI http://www.stackoverflow.com | awk '/Connection/ { print $2 }')
$ [[ $conn =~ keep ]] && echo KEEP
KEEP

或者。。。if [[ $conn =~ keep ]]; then foobar ; fi

最新更新