谁在刮bash脚本—;if子句错误

谁在刮bash脚本—;if子句错误,bash,whois,Bash,Whois,我编写了一个相当简单的脚本,以确定哪些单词域仍然可用。我在第7行中得到了一个错误,if子句,但是我看不出有什么错误。请指出我明显的错误!:-) [编辑:我应该补充一点,我在网上查到了类似的直截了当的脚本,它们在语法上似乎完全相同。我肯定我只是漏掉了一些显而易见的东西,但是…] [编辑2:最终脚本,包括piked提供的更正以及其他改进:] #!/bin/bash ava=/usr/local/share/scripts/domains.available.`date "+%Y%m%d"` una

我编写了一个相当简单的脚本,以确定哪些单词域仍然可用。我在第7行中得到了一个错误,if子句,但是我看不出有什么错误。请指出我明显的错误!:-)

[编辑:我应该补充一点,我在网上查到了类似的直截了当的脚本,它们在语法上似乎完全相同。我肯定我只是漏掉了一些显而易见的东西,但是…]

[编辑2:最终脚本,包括piked提供的更正以及其他改进:]

#!/bin/bash

ava=/usr/local/share/scripts/domains.available.`date "+%Y%m%d"`
unava=/usr/local/share/scripts/domains.unavailable.`date "+%Y%m%d"` 

for i in $(cat /usr/share/dict/words);
do
    i="$i.com"
#   i="notarealdomainatall.com"
    echo $i processing `date`
    if grep -Fxq $i $ava
    then
        echo $i DUPLICATE, prev AVAILABLE
    elif grep -Fxq $i $unava
        then
            echo $i duplicate, prev unavailable
        else
            if [[ $(whois $i) == *"No match for"* ]]
            then
                echo $i AVAILABLE
                echo "$i">>$ava
            else
                echo $i unavailable
                echo "$i">>$unava
            fi
    fi
done

尝试使用双括号和引号外的*

if [[ $(whois $i) == *"No match for"* ]]
引用论点:

if [ "$(whois $i)" == "*No match for*" ]
否则,响应的所有单词将被拆分为
test
命令的单独参数

或者可以使用内置的条件运算符。它不进行变量的分词或命令替换

if [[ $(whois $i) == "*No match for*" ]]

旁白:没有WHOIS记录并不一定意味着有域名可用;它只是提供了一个开始手动查询的起点。后者(内置条件运算符的双括号)实际上解决了错误,但默默地给了我一致的错误否定。换句话说,
$i=notarealdomainatall.com
仍然流到else块。您是否希望
=
进行模式匹配而不是精确匹配?引号内的通配符不被视为模式字符。啊,是的,我是'不匹配是whois查询不太可能产生的文本字符串;-)
if [[ $(whois $i) == "*No match for*" ]]