编写shell脚本,判断局域网内主机是否在线 while循环
时间: 2024-01-10 09:53:27 浏览: 113
以下是一个简单的shell脚本,可以用于判断局域网内主机是否在线,使用while循环定期检查主机的状态:
```bash
#!/bin/bash
# 定义需要检查的主机列表
hosts=("192.168.1.1" "192.168.1.2" "192.168.1.3")
# 定义检查间隔时间(单位:秒)
interval=5
while true; do
for host in "${hosts[@]}"; do
ping -c 1 "$host" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$host is online"
else
echo "$host is offline"
fi
done
echo "---------------------"
sleep $interval
done
```
在上面的脚本中,我们首先定义了需要检查的主机列表,然后使用while循环不断执行ping命令,检查每一个主机的状态。如果ping命令返回0,表示主机在线,否则表示主机离线。在每一轮检查结束后,脚本会暂停一段时间(由interval变量指定),然后再次执行下一轮检查。
相关问题
用shell写一个高并发ping局域网的IP地址的脚本,要求最多同时ping 5个IP
以下是一个使用shell脚本实现高并发ping局域网IP地址的示例:
```bash
#!/bin/bash
# 定义局域网IP地址范围(根据实际情况进行调整)
start_ip="192.168.0.1"
end_ip="192.168.0.255"
# 定义最大并发数
max_concurrency=5
# 并行ping函数
parallel_ping() {
ip=$1
ping -c 1 -W 1 $ip >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "IP地址 $ip 可以ping通"
else
echo "IP地址 $ip 无法ping通"
fi
}
# 循环遍历IP地址范围
for ((i=0; i<256; i++)); do
ip=$(printf "%s.%d" "${start_ip%.*}" "$i")
# 获取当前正在执行的并发数
running_jobs=$(jobs -p | wc -l)
# 如果并发数超过最大并发数,则等待直到有空闲的并发槽
while [ $running_jobs -ge $max_concurrency ]; do
sleep 0.1
running_jobs=$(jobs -p | wc -l)
done
# 并行ping IP地址
parallel_ping $ip &
done
# 等待所有ping命令完成
wait
```
在脚本中,你可以根据实际情况调整`start_ip`和`end_ip`变量,以定义局域网IP地址的范围。然后,使用循环遍历IP地址范围,并使用`parallel_ping`函数来并行ping每个IP地址。在执行之前,脚本会检查当前正在执行的并发数是否超过了最大并发数`max_concurrency`,如果超过了,则等待直到有空闲的并发槽。
请注意,脚本中使用了`ping -c 1 -W 1 $ip >/dev/null 2>&1`来执行ping命令,并将输出重定向到/dev/null,以避免在终端输出ping的结果。你可以根据需要对ping命令的参数进行调整。
阅读全文