bash 遍历一个文本文件-linux bash遍历一个IP文件

本文介绍了如何使用Bash脚本遍历IP地址文件,通过`dig`命令查询IP归属,并展示了两种方法:一种是逐行操作,另一种是封装成函数。同时讨论了可能遇到的网络延迟问题和脚本整合过程。
摘要由CSDN通过智能技术生成

bahs 遍历一个文本文件-linux bash 这里遍历一个IP文件

演示附件下载 【有道云笔记】遍历一个文本文件-这里遍历一个IP文件
https://note.youdao.com/s/AGGu3shU

演示附件 请在桌面使用 把解压后的两个文件 一个执行脚本 一个演示数据文件

这里遍历一个IP文件,得到一个查询脚本 ,执行查询脚本得到IP归属

这个是360智脑 AI小助手给出的代码

#!/bin/bash 
ip_file_path="path/to/your/ip_addresses.txt"
# 创建一个空的查询脚本文件 
query_script_path="path/to/your/query_script.sh"
touch "$query_script_path"
# 使用while循环和read命令逐行读取IP地址文件 
while read ip_address; do 
# 使用dig命令查询IP地址的详细信息 
dig "@resolver1.opendns.com" -t any "$ip_address"
# 将查询命令添加到查询脚本文件中 
echo "dig \"@resolver1.opendns.com\" -t any \"$ip_address\"" \
 >> "$query_script_path"
done < "$ip_file_pat 

这个是文心一言给出的代码

#!/bin/bash  
filename="yourfile.txt"  # 替换为你的文件名    
while IFS= read -r line  
do  
    echo "$line"  
done < "$filename"
#在这个脚本中:
#IFS= 用于在读取行时保留前导和尾部的空白字符。
#read -r 用于读取一行,-r 选项阻止反斜杠转义。
#echo "$line" 用于打印当前行。
#done < "$filename" 表示从文件 $filename 中读取输入。

下面是我结合以上代码写的 核心逻辑代码

第一种写法

#!/bin/bash
#------------------------
# 输出脚本在执行
#------------------------
filename="yourfile.txt"
MY_LOGS_DIR_C='$HOME/桌面/ip_xx.sh'
cat ${filename} | while read MYip; do
echo -e "curl -s cip.cc/${MYip} | grep -n '地址'| awk '{print \$5}'\necho '${MYip}'\necho '-----'\nsleep  1s" \
>>${MY_LOGS_DIR_C}
done
chmod -R 700 ${MY_LOGS_DIR_C}
bahs ${MY_LOGS_DIR_C}

第二种写法

#!/bin/bash
#------------------------
# 写一个函数 MY_IP_LIST 自动打印
#------------------------
filename="yourfile.txt"
cat ${filename} | while read MYip; do
MY_IP_LIST(){
curl -s cip.cc/${MYip} | grep -n '地址'| awk '{print $5}'
echo "${MYip}"
echo '-----'
# 隔1秒查询一次,直到最后一个IP
sleep  1s
}
MY_IP_LIST
done

下面是核心代码 使用IP查询 归属地 这条查询命令可能会应为网络延迟问题查询失败

curl -s cip.cc/IP | grep -n '地址'| awk '{print $5}'

下面切入正题,演示整个整合代码

第一种写法

#!/bin/bash
#------------------------
# 遍历一个IP地址文件 查询归属地
#------------------------
MY_LOGS_DIR_A="$HOME/桌面/MY_IP_LOGS_I8520.LOG"
MY_LOGS_DIR_B_1="$HOME/桌面/MY_IP_LOGS_I8520.LOG.1"
MY_LOGS_DIR_B_2="$HOME/桌面/MY_IP_LOGS_I8520.LOG.2"
#这个是保持遍历后的脚本代码保存在这里 IP_XX.sh
MY_LOGS_DIR_C="$HOME/桌面/IP_XX.sh"
# IP_XX.sh清空该脚本的全部内容
> ${MY_LOGS_DIR_C}
#------------------------
# 处理原始数据,吧IP筛选出来,在去除重复行
#------------------------
cat ${MY_LOGS_DIR_A} | \
grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
sed 's/0.0.0.0//g' > ${MY_LOGS_DIR_B_1}
#去除重复行,把新数据写入 $HOME/桌面/MY_IP_LOGS_I8520.LOG.2
sort -k2n ${MY_LOGS_DIR_B_1}| \
awk '{if ($0!=line) print;line=$0}' > ${MY_LOGS_DIR_B_2}
sleep  0.5s
#-------------------------------
# 遍历一个ip地址的文件查询归属地
# === 核心代码 curl -s cip.cc/IP | grep -n '地址'| awk '{print $5} ===
# MYip表示每一行的变量 Ip 地址,我是这么理解的
#------------------------------
cat ${MY_LOGS_DIR_B_2} | while read MYip; do
echo -e "curl -s cip.cc/${MYip} | \
grep -n '地址'| awk '{print \$5}'\necho '${MYip}'\necho '-----'\nsleep  1s" >>${MY_LOGS_DIR_C}
done
sleep  0.5s
#------------------------------
# 附加全新执行查询脚本
#------------------------------
chmod -R 700 ${MY_LOGS_DIR_C}
bash ${MY_LOGS_DIR_C}
sleep  0.5s && rm -rf ${MY_LOGS_DIR_B_1} ${MY_LOGS_DIR_B_2} ${MY_LOGS_DIR_C}
exit 0

第二种写法

#!/bin/bash
#------------------------
# 遍历一个IP地址文件 查询归属地
#------------------------
MY_LOGS_DIR_A="$HOME/桌面/MY_IP_LOGS_I8520.LOG"
MY_LOGS_DIR_B_1="$HOME/桌面/MY_IP_LOGS_I8520.LOG.1"
MY_LOGS_DIR_B_2="$HOME/桌面/MY_IP_LOGS_I8520.LOG.2"

#------------------------
# 处理原始数据,吧IP筛选出来,在去除重复行
#------------------------
cat ${MY_LOGS_DIR_A} | \
grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \
sed 's/0.0.0.0//g' > ${MY_LOGS_DIR_B_1}
#去除重复行,把新数据写入 $HOME/桌面/MY_IP_LOGS_I8520.LOG.2
sort -k2n ${MY_LOGS_DIR_B_1}| awk '{if ($0!=line) print;line=$0}' > ${MY_LOGS_DIR_B_2}
sleep  0.5s
#-------------------------------
# 写一个 MY_IP_LIST 函数 while 循环里面执行
#------------------------------
cat ${MY_LOGS_DIR_B_2} | while read MYip; do
MY_IP_LIST(){
curl -s cip.cc/${MYip} | grep -n '地址'| awk '{print $5}'
echo "${MYip}"
echo '-----'
# 隔1秒查询一次,直到最后一个IP
sleep  1s
}
MY_IP_LIST
done
sleep  0.5s && rm -rf ${MY_LOGS_DIR_B_1} ${MY_LOGS_DIR_B_2}

exit 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值