我正在尝试检查服务器上的域是否处于活动状态。到目前为止,我遇到了错误。
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
这是我得到的当前错误。
答案 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
是的另一个问题。