在学习ping命令的时候,突发奇想:为何不使用ping命令对网络连接故障进行排查?

具体思路:

1. ping  127.0.0.1 (虚拟网卡地址)以检查主机的TCP/IP协议栈是否正常。

2. ping   [网络号]    以广播的形式向局域网发送数据包,检查主机网卡、modem、路由器(网关)是否正常。

3. nslookup  www.baidu.com  检查DNS服务是否正常。

4. ping  www.58.com  查看能否连网。

以下是shell代码内容(含解析):

 # times,time out =  s;
ping -c -w 127.0.0.1 #-c表示发送数据包次数(4次),-w表示超时时间(10s),127.0.0.1表示虚拟网卡地址(回环地址)
if [ "$?" != ];then #如果回环测试不成功成功,变量 $s 为0表示上一个指令执行成功。这里注意[]内的三个组件之间要有空格,变量要用""。
echo "ping fail! TCP/IP Stack is not ready!\a\n"  #回环测试失败,说明TCP/IP协议栈有问题   
exit 0                                #退出脚本执行
else
echo "TCP/IP is ok !\a\n"                    #回环测试成功,说明TCP/IP协议栈没问题
read -p "please input your network numbers: " addr     #提示用户输入网络号(路由器的IP),用addr变量接收
ping -c -w -b $addr                     #ping 以广播形式(-b选项)向局域网广播
if [ "$?" != "" ];then                      #广播失败,说明主机网卡、modem或者路由器出现问题
echo "ping fail! The Router is not ready!\a\n"      #打印错误信息
exit 0                              #退出脚本执行
else
echo "Router is ok !\a\n"                  #广播成功
nslookup www.baidu.com                    #使用nslookup命令测试DNS服务是否正常
if [ "$?" != "" ];then                           
echo "nslookup fail !The DNS Server is not ready !\a\n"    #打印DNS寻址失败,DNS服务异常信息
exit 0                                  #退出
else
echo "The DNS Server is ok !\a\n"                  #DNS服务正常
ping -c -w www..com                      #最后检查能否上网
if [ "$?" != "" ];then
echo "Other questions ....\a\n"                 #如果这里失败,可能是www.58.com设置了防火墙,ping数据包不回复
exit
else
echo "the net is ok"                       #网络正常
exit 0                               #退出
fi
fi
fi
fi

以下是脚本运行结果:

当我断开网络连接时,显示DNS服务异常:

使用ping网络工具编写Shell脚本程序实现网络连接故障初步排查的更多相关文章

  1. 编写shell脚本遇到的问题

    运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...

  2. 如何在linux下编写一个简单的Shell脚本程序

    在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...

  3. 编写Shell脚本的最佳实践

    编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...

  4. python编写shell脚本详细讲解

    python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...

  5. Linux编写Shell脚本

    ——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...

  6. Linux shell脚本判断服务器网络是否可以上网

    Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www ...

  7. [转帖]编写shell脚本所需的语法和示例

    编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...

  8. 创建和运行shell脚本程序

    转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...

  9. 在windows下编写shell脚本

    注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...

随机推荐

  1. kubernetes-集群构建

    本实验参考:https://github.com/gjmzj/kubeasz kubernetes官方github地址 https://github.com/kubernetes/kubernetes ...

  2. 201871010119-帖佼佼《面向对象程序设计(java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>     https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ...

  3. 2019年终总结:10场演讲、内推20人、公众号2万粉丝、Code Runner 1000万下载

    2019年是值得记录的一年,成长许多,也收获许多. 做了 10 场大会的技术演讲,成功内推 20 人拿到微软 Offer,知乎 Live 2000 听众,公众号 2 万粉丝,GitHub 2万 sta ...

  4. ASP.NET Core Web API 最佳实践指南

    原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...

  5. angular实现draggable拖拽

    前言:最近项目要实现一个拖拽功能,我在网上开始了各类搜寻,虽然后面因为数据原因舍弃了拖拽的这一需求,但是为了不辜负最近的研究,还是来记录一下. 场景需求:面试预约选时间节点,候选人之间是可以相互交换的 ...

  6. 你不知道的JavaScript(上)this和对象原型(三)

    第四章  混核对象“类” 1.理论 面向对象编程强调的是数据和操作数据的行为本质上是互相关联的.实例化,继承,多态性 javascript中只有对象,并不存在可以被实例化的“类”.一个对象并不会被复制 ...

  7. hdu 1028 Ignatius and the Princess III (n的划分)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  8. WebGPU学习系列目录

    介绍 大家好,本系列从0开始学习WebGPU API,并给出相关的demo. WebGPU介绍 WebGPU相当于DX12/Vulkan,能让程序员更灵活地操作GPU,从而大幅提升性能. 为什么要学习 ...

  9. 利用FOR XML PATH行转列(根据某字段分组,多行数据转成一行,并用逗号隔开)

    CREATE TABLE #TEST(A VARCHAR(10) NULL,B VARCHAR(MAX) NULL) INSERT INTO #TESTSELECT 'A','A001'UNION A ...

  10. 从微信小程序开发者工具源码看实现原理(三)- - 双线程通信

    文章概览: 引言 小程序开发者工具双线程通信的设计 1.on: 用来收集小程序开发者工具触发的事件回调 2.invoke:以api方式调用开发工具提供的基础能力 3.publish:用来向Appser ...