在bash中捕获-ne的问题?

时间:2012-03-04 08:52:08

标签: bash

运行下面的代码会给我错误

-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

1 个答案:

答案 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" ]