0

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

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

这是我得到的当前错误。

4

3 回答 3

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
于 2013-02-28T17:58:43.453 回答
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"
于 2013-02-28T18:02:54.120 回答
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获取输出时的缺失另一个问题。

于 2013-02-28T17:58:34.957 回答