我想创建一个比较特定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
。
这里的字符串比较似乎失败了,尽管当我echo
var
值时,我得到了所需的内容。
任何想法都会有帮助,谢谢。
您正在比较文字字符串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