运行下面的代码会给我错误
-bash: [: -ne: unary operator expected
res is ==“”。但我认为-ne会将字符串与int进行比较。当我确实得到错误时,它上面而不是我想要的是域名和卷曲输出(它在第一次调用中沉默,因为它会将垃圾放在stdout上)。我如何执行if body?
#!/bin/sh
function test {
res=`curl -I $1 | grep HTTP/1.1 | awk {'print $2'}`
if [ $res -ne 200 ]
then
echo "Error on $1"
curl -I $1
fi
}
test invalidsite.hsdgsdhfgsgdfysgdfgsdfygsyd.com
答案 0 :(得分:6)
如果res
为空字符串,则您的条件评估为[ -ne 200]
,这是错误消息所抱怨的内容。尝试通过["$res" -ne 200]
修复此问题也无法在此处工作,因为空字符串不是数字。请改为:[ -z "$res" -o "$res" -ne 200 ]
。这将首先检查字符串是否为空(如果是,则失败)。如果它不是空的,检查该值是否不是200.但是如果res
是一个非整数字符串,这仍然会使bash发生混乱,所以我真的在这里做一个字符串比较:[ -z "$res" -o "$res" != "200" ]
修改:我刚刚想到,如果我们已经进行了字符串比较,您可以删除-z
,只需使用[ "$res" != "200" ]
。