9、linux批量ping
linux批量ping
v1
1、脚本内容
[root@docusaurus-wiki linux_batch_ping]# cat ip-test.txt
10.30.136.104
10.30.136.105
10.30.141.133
10.30.141.134
10.30.138.104
10.30.138.105
[root@docusaurus-wiki linux_batch_ping]# cat ping.sh
#!/bin/bash
#根据测试需要修改ip-test.txt
for k in `cat ip-test.txt`
do
ping -c 2 $k |grep -q 'ttl=' && echo "$k ok" || echo "$k failed"
done
[root@docusaurus-wiki linux_batch_ping]#
2、使用方法
- 把
ping.sh和ip-test.txt
文件上传到linux系统下 - 修改ip-test.txt里面的ip地址
- 执行ping.sh脚本,测试ip连通性
注意事项:在把ping.sh文件上传到linux下,要保证其文件格式是linux版本,否则脚本执行时会报错; 可用
cat -v ping
来观察。
实际测试效果:
3、脚本位置
当前目录下。
说明
[root@docusaurus-wiki linux_batch_ping]# cat ip-test.txt
10.30.136.104
10.30.136.105
10.30.141.133
10.30.141.134
10.30.138.104
10.30.138.105
[root@docusaurus-wiki linux_batch_ping]# cat ping.sh
#!/bin/bash
#根据测试需要修改ip-test.txt
for k in `cat ip-test.txt`
do
ping -c 2 $k |grep -q 'ttl=' && echo "$k ok" || echo "$k failed"
done
[root@docusaurus-wiki linux_batch_ping]#
这段代码是一个简单的 Bash 脚本,用于批量测试在 ip-test.txt
文件中列出的 IP 地址是否可以通过 ICMP(网络控制消息协议,通常用于执行 ping 测试)到达。
以下是脚本 ping.sh
中每一行代码的逐行解释:
-
#!/bin/bash
:这行被称为 shebang,它告诉系统这个脚本应当使用/bin/bash
,即 Bash shell 环境来执行。 -
空行:在脚本中不起作用,只是为了可读性。
-
#根据测试需要修改ip-test.txt
:这是一个注释,为用户提供了一条指示,说明如果需要进行不同的测试,则应修改ip-test.txt
文件。 -
空行:在脚本中不起作用,只是为了可读性。
-
for k in
cat ip-test.txt:这是一个 for 循环,循环的变量是 `k`。这个循环会逐行读取 `ip-test.txt` 中的内容。反引号(
``)用于命令替换,这意味着Shell会首先执行反引号内的命令(这里是
cat ip-test.txt`),并将输出作为 for 循环的输入。 -
do
:这是循环的开始。 -
ping -c 2 $k |grep -q 'ttl=' && echo "$k ok" || echo "$k failed"
:这是一个管道命令序列,执行以下操作:ping -c 2 $k
:对变量$k
中的 IP 地址执行 ping 命令,其中-c 2
表示发送两个 ICMP 回显请求包。|
:管道符号,将上一个命令的输出传递给下一个命令。grep -q 'ttl='
:使用 grep 命令在 ping 的输出中静默搜索文本 'ttl='(表示 ping 成功得到了响应)。&&
:逻辑与(AND)运算符,如果grep -q 'ttl='
命令(即 ping 成功)返回值为 0(成功),就会执行后面的命令。echo "$k ok"
:如果 ping 命令成功(找到 'ttl='),则打印 IP 地址和 "ok"。||
:逻辑或(OR)运算符,如果grep -q 'ttl='
命令(即 ping 失败)返回值非 0(失败),就会执行后面的命令。echo "$k failed"
:如果 ping 命令失败(没有找到 'ttl='),则打印 IP 地址和 "failed"。
-
done
:这个循环的结束。
总之,这个脚本会逐个读取 ip-test.txt
文件中的每个 IP 地址,并尝试 ping 这些地址。如果 ping 成功(即 ICMP 响应中包含 TTL),则打印 IP 地址和 "ok";如果 ping 失败(即没有收到 ICMP 响应),则打印 IP 地址和 "failed"。
在实际执行前,需要给 ping.sh
脚本文件执行权限,这可以通过运行命令 chmod +x ping.sh
来实现。然后,通过运行 ./ping.sh
命令来执行脚本。
v2(增强版)
[root@NG-WAF095239 fj]# cat ping.sh
#!/bin/bash
for ip in `cat ip.txt` #启动循环调动ip地址
do
{
ping -c1 -W1 $ip &>/dev/null # 测试ip是否在线
if [ $? -eq 0 ] ;then
echo -e "$ip" >>ok_`date +%F`.txt #如果修改成功进行记录
else
echo "$ip" >>fail_`date +%F`.txt #如果修改失败进行记录
fi
}&
done
待亲自测试
。