需求:
某运维公司的小A,想要重新规划IP地址。他想要检测到192.168.1.0网段中未被使用的ip进行规划分配,那么如果已经分配的ip,则不使用。

实现过程:shell脚本实现

在服务器任意目录创建test.sh脚本,脚本内容如下
#!/bin/bash
#测试存活的主机
test()
{
for i in $(seq 1 20)
do
ping -c 2 192.168.1.$i > /dev/null
if [ $? -eq 0 ];then
echo "192.168.1.$i,存活"
else
echo "192.168.1.$i,失败"
fi
done
}

test

注意:在测试脚本的过程中,我们可以抽样测试几台主机,等确认脚本是成功的话,才把循环里的20变成254。前期再不确定脚本的前提下,不应该一下子循环所有的主机。

上面的脚本内容中
Ping -c 2代表,如果ping某个iP两次没有数据返回,则说明该ip未分配

实验验证

结论:ping一台成功的主机大概需要1s,一台失败的主机要2s。
假如该网段所有主机都是失败,则需要254*2=408s才能全部iP检查完毕,耗时非常慢

优化脚本:(多线程)

把脚本内容改成如下即可

#!/bin/bash
for i in {1..20}
do
{
ping -c 2 192.168.1.$i >/dev/null
if [ $? = 0 ];then
echo "192.168.1.$i 存活"
else
echo "192.168.1.$i 不存活"
fi
} &
done
wait

&是把进程放到后台,不用等待,wait是等所有进程都执行完才推出。如果没有wait可能会导致程序无法退出,原因是父进程先退出,子进程还没执行完。这种情况就是所谓的僵尸进程。

注意:多线程展示的结果和实现过程的脚本一致,只不过多线程的脚本是不用等待的,所以它展示的结果不是按ip的顺序展示的

结果验证
脚本优化前:

脚本优化后

执行效率快了8倍

多线程每次的执行的结果,ip排序都不一致

©著作权归作者所有:来自51CTO博客作者Zabbix_Z大叔的原创作品,如需转载,请注明出处,否则将追究法律责任

你的鼓励让我更有动力

赞赏

0人进行了赞赏支持

更多相关文章

  1. shell脚本之灵活调用函数技巧
  2. Docker容器跨主机通信之:直接路由方式
  3. Ansible 之 配置远程主机访问
  4. 5、Shell命令脚本
  5. 内网主机从外面连接不了?SSH反向隧道来帮你!
  6. 脚本实现Oracle19c_pdb单实例自动安装部署
  7. centos 7 修改主机名
  8. Github | 推荐一个Python脚本集合项目
  9. Oracle19c_cdb数据库自动安装部署脚本

随机推荐

  1. android 全屏问题
  2. view的隐藏和显示
  3. 2011.10.11——— android GestureDetect
  4. Toast大全(默认,顶部,底部,各种自定义) A
  5. android 修改statusbar(二)
  6. Android中获得上下文的静态方法
  7. Android中利用DisplayMetrics取得手机屏
  8. android 幾個快速編譯images指令
  9. Android ListView 长按列表弹出菜单
  10. Android实现富文本编辑