使用ping网络工具编写Shell脚本程序实现网络连接故障初步排查
在学习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脚本程序实现网络连接故障初步排查的更多相关文章
- 编写shell脚本遇到的问题
运行shell脚本提示“syntax error near unexpected token for((i=0;i<$length;i++))”: 原因是因为Linux下的换行符是 \n 而你在 ...
- 如何在linux下编写一个简单的Shell脚本程序
在了解了linux终端和其搭配的基本Shell(默认为bash)的基础下,我们就可以在终端中用vi/vim编辑器编写一个shell的脚本程序了 Shell既为一种命令解释解释工具,又是一种脚本编程语言 ...
- 编写Shell脚本的最佳实践
编写Shell脚本的最佳实践 http://kb.cnblogs.com/page/574767/ 需要记住的 代码有注释 #!/bin/bash # Written by steven # Name ...
- python编写shell脚本详细讲解
python编写shell脚本详细讲解 那,python可以做shell脚本吗? 首先介绍一个函数: os.system(command) 这个函数可以调用shell运行命令行command并且返回它 ...
- Linux编写Shell脚本
——<Linux就该这么学>笔记Shell脚本命令的工作方式有两种 交互式: 用户每输入一条命令就立即执行 批处理: 由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中 ...
- Linux shell脚本判断服务器网络是否可以上网
Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需要有个函数来判断服务器网络状态 我们可以通过curl来访问 www ...
- [转帖]编写shell脚本所需的语法和示例
编写shell脚本所需的语法和示例 https://blog.csdn.net/CSDN___LYY/article/details/100584638 在说什么是shell脚本之前,先说说什么是sh ...
- 创建和运行shell脚本程序
转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...
- 在windows下编写shell脚本
注意两点: 1.第一行:#!/bin/bash 2.将文档格式转换为unix,因为在windows下编写shell脚本回车符是\n\r,而linux下的回车符是\n,所以在linux下运行脚本的时候, ...
随机推荐
- 根据WSGI协议自己实现mini-web框架(1)
1. 为什么要研究WSGI 我之前在学习web开发时,往往都是根据MVT等架构直接写所谓的“视图”,使用其本身自带的http服务器,当时就一直很好奇,为什么有了HTTP协议之后,还要研究WSGI协议, ...
- LeetCode刷题总结-树篇(上)
引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...
- Django:永别了pycrypto库~
在开发微信登陆功能时,解密用户信息需要使用到 Crypto 包,所以安装了pycrypto库. Linux.OS X 系统均可直接 pip install pycrypto . 最近换到win10下开 ...
- Autofac 泛型依赖注入
using Autofac;using Autofac.Extensions.DependencyInjection;using Hangfire;using Microsoft.AspNetCore ...
- linux中批量添加文件前缀的操作
需要在文件夹内所有txt文件的文件名前面添加"gt_"; 就是由原来的文件“xxx.txt”变成“gt_xxx.txt”: 网上搜来的脚本如下: for i in `ls`; do ...
- LICEcap 动画屏幕录制软件
下载地址 https://licecap.en.softonic.com/ LICEcap捕捉屏幕的区域并保存为gif动画或lcf格式 效果请看下面的链接 https://www.cnblogs ...
- SpringCloud断路器(Hystrix)
一.为什么需要 Hystrix? 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC).为了保证其高可用,单个服务又必须集群部署.由于网络原因或者自身的原因,服务并不能保 ...
- Nginx模块及配置虚拟主机
1.Nginx的2组主要的模块 (1)core modules (必需,核心模块) 包括:Main.Events (2)Standard HTTP modules(虽然不是必需,但是缺省都会安装,不建 ...
- Android OkHttp + Retrofit 断点续传
本文链接 前面我们已经知道如何使用OkHttp+Retrofit下载文件. 下载文件时,可能会遇到一些意外情况,比如网络错误或是用户暂停了下载. 再次启动下载,如果又要从头开始,会白白浪费前面下载好的 ...