使用nslookup筛选不含指定IP的.com域名脚本问题求助
解决nslookup结果筛选双IP的问题
修改后的脚本方案一(直观易懂)
SUB='.com' > com.txt # 清空目标文件,避免重复执行时内容冗余 for address in $(cat linux.hosts); do if [[ "$address" == *"$SUB"* ]]; then echo "Processing [$address]" # 捕获当前域名的nslookup解析结果 lookup_result=$(nslookup "$address") # 检查结果中是否不存在两个目标IP的任意一个 if ! echo "$lookup_result" | grep -qE '155\.55\.66\.55|155\.55\.66\.54'; then # 符合条件则写入文件,添加分隔线方便区分不同域名 echo "$lookup_result" >> com.txt echo "---" >> com.txt fi fi done
修改后的脚本方案二(纯awk处理)
SUB='.com' > com.txt for address in $(cat linux.hosts); do if [[ "$address" == *"$SUB"* ]]; then echo "Processing [$address]" nslookup "$address" | awk ' BEGIN { has_bad_ip = 0 } # 检测到目标IP则标记 /155\.55\.66\.55|155\.55\.66\.54/ { has_bad_ip = 1 } # 记录所有解析行 { lines[NR] = $0 } # 结束时判断:无坏IP则输出所有记录 END { if (!has_bad_ip) { for (i=1; i<=NR; i++) print lines[i] print "---" } }' >> com.txt fi done
原脚本失效原因
原脚本中awk的逻辑错误:!/155.55.66.55/ || !/155.55.66.54/ 等价于!(/IP1/ && /IP2/),意思是只要行内不同时包含两个IP就保留。这会导致只要行里没有其中一个IP,哪怕包含另一个,也会被写入文件,完全不符合“解析结果不包含两个IP中任意一个”的需求。
优化说明
- 使用
$(cat linux.hosts)替代反引号,更符合现代shell语法规范 - 给变量
address加双引号,避免域名含特殊字符时解析出错 - 开头清空
com.txt,防止多次执行后内容重复 - 添加
---分隔不同域名的解析结果,提升可读性
内容的提问来源于stack exchange,提问作者Abby
相关产品推荐
相关产品推荐

