检查域上的域是否处于活动状态

时间:2013-02-28 17:55:47

标签: linux bash cpanel whm

我正在尝试检查服务器上的域是否处于活动状态。到目前为止,我遇到了错误。

list=/root/domainlist.txt
for i in $(cat $list)
do
  echo "checking " $i
  $ip = host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'
  if [[ $ip == "xx.xx.xx.xx" ]]; then
    $i >> /root/activedomains.txt
  fi
done

输出:

activedomains: line 4: =: command not found

这是我得到的当前错误。

3 个答案:

答案 0 :(得分:2)

  • =
  • 之前和之后没有空格
  • 作业中没有美元符号
  • 您可能需要该命令的结果,因此请将其括在$( )

    ip=$(host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')
    

像这样写

文件
echo "$i" >> /root/activedomains.txt

答案 1 :(得分:2)

时出现语法错误
$ip = host $i |grep -o -m 100 '...'
你应该改用:

ip=$(host $i |grep -o -m 100 '...')

使用布尔逻辑的更好方法(不需要grep,如果host $ip失败,它将返回 FALSE ):

list=/root/domainlist.txt

while read ip; do
    echo "checking $ip"
    host "$ip" &>/dev/null && echo "$ip" >> /root/activedomains.txt
done < "$list"

相当于

list=/root/domainlist.txt

while read ip; do
    echo "checking $ip"
    if host "$ip" &>/dev/null; then
        echo "$ip" >> /root/activedomains.txt
    fi
done < "$list"

答案 2 :(得分:1)

对于初学者,您不应该将$ip分配给ip ...但可能会有更多错误。

我的猜测是你想要的(第4/5行):

ip=$(host $i |grep -o -m 100 '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')

另请阅读user000001的回答。获取输出时缺少的echo的另一个问题。