自动Ping脚本的编写要点
2009-09-14 21:57
337 查看
因为工作关系,最近需要每天对干线网络进行连通性及时延测试,执行大量的ping命令,还要记住大量的IP地址。
于是设计了一个NetTest.cmd命令行脚本。
主要过程及代码如下:
第一步:获取本机地址。
代码如下
::获取本机的IP地址
@if exist %TEMPFILE% del %TEMPFILE%
@ipconfig | find "IP Address" > %TEMPFILE%
:: 判断是否生成了有效的%TEMPFILE%文件
@CALL :SubGetFileSize %TEMPFILE%
@if %FileSize% LEQ 10 (
@ECHO 网线没有连接或者交换机没有开机,不能进行测试。
@goto ExitPing
)
::
::@for /F "skip=7 tokens=15,*" %%I in (%TEMPFILE%) do (
@for /F "tokens=15,*" %%I in (%TEMPFILE%) do (
@set LocalAddr=%%I
@goto :GetAddrRouterFlag
)
::@ECHO LocalAddr=%LocalAddr%
第二步:进行本机地址识别
::识别地址集
:GetAddrRouterFlag
@for /F "delims=. tokens=1" %%I in ("%LocalAddr%") do (
@set /A AddrHead=%%I
@set /A AddrRouterFlag=%%I/64
@goto :StartTest
)
:StartTest
@if %AddrRouterFlag% EQU 0 goto :StartR1Test
@if %AddrRouterFlag% EQU 1 goto :StartR2Test
@if %AddrRouterFlag% EQU 2 goto :StartR3Test
@if %AddrRouterFlag% EQU 3 goto :StartR4Test
@if %AddrRouterFlag% EQU 4 goto :StartR5Test
@goto :ExitPing
第三步:处理对目标地址集的测试
:StartR1Test
@ECHO 启动到所有站点的主用路由网络连通性测试...
::Center1(1.x.x.x)
@if NOT %AddrHead% EQU 1 start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 1.32.0.20 %PINGOPTIONS%"
......
@goto :ExitPing
:StartR2Test
@ECHO 启动到所有站点的备用路由2网络连通性测试...
::Center1(65.x.x.x)
@if NOT %AddrHead% EQU 65 start cmd.exe /K "title [router2-到Center01接入交换机UPLink接口-65.132.10.20]&& echo 开始测试时间%TIME% && ping 65.132.10.20 %PINGOPTIONS%"
......
@goto ExitPing
....................................
:: *********************************************************************************
:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize
:ExitPing
@ECHO.
@PAUSE
@ECHO ON && endlocal
其中,脚本内函数为
:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize
重点代码分析
start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 11.132.10.20 %PINGOPTIONS%"
该语句包含start->cmd->title/echo/ping三层调用关系。其中start用来启动新的控制台窗口Win;cmd /k用来保证Win窗口在按Ctrl+C结束脚本后保持在当前窗口中,并解释执行后面的命令;title/echo/ping是依次执行的三个命令,分别设置Win窗口的标题,显示测试开始时间,进行ping测试。
特别要注意的是,
第一:title后面的[]括起来的是Win窗口的标题,而外部的“”括起来的是cmd要执行的脚本,这里是嵌套的脚本。
第二:start 可以带窗口title启动新的命令提示符窗口,但新窗口将自动采用windows官方默认的属性设置(高度、宽度、颜色等),所以,这里必须是在cmd中进行窗口title的设置。
*********************************
在下一篇《一键式Ping脚本 》中给出了一个完整的例子。
于是设计了一个NetTest.cmd命令行脚本。
主要过程及代码如下:
第一步:获取本机地址。
代码如下
::获取本机的IP地址
@if exist %TEMPFILE% del %TEMPFILE%
@ipconfig | find "IP Address" > %TEMPFILE%
:: 判断是否生成了有效的%TEMPFILE%文件
@CALL :SubGetFileSize %TEMPFILE%
@if %FileSize% LEQ 10 (
@ECHO 网线没有连接或者交换机没有开机,不能进行测试。
@goto ExitPing
)
::
::@for /F "skip=7 tokens=15,*" %%I in (%TEMPFILE%) do (
@for /F "tokens=15,*" %%I in (%TEMPFILE%) do (
@set LocalAddr=%%I
@goto :GetAddrRouterFlag
)
::@ECHO LocalAddr=%LocalAddr%
第二步:进行本机地址识别
::识别地址集
:GetAddrRouterFlag
@for /F "delims=. tokens=1" %%I in ("%LocalAddr%") do (
@set /A AddrHead=%%I
@set /A AddrRouterFlag=%%I/64
@goto :StartTest
)
:StartTest
@if %AddrRouterFlag% EQU 0 goto :StartR1Test
@if %AddrRouterFlag% EQU 1 goto :StartR2Test
@if %AddrRouterFlag% EQU 2 goto :StartR3Test
@if %AddrRouterFlag% EQU 3 goto :StartR4Test
@if %AddrRouterFlag% EQU 4 goto :StartR5Test
@goto :ExitPing
第三步:处理对目标地址集的测试
:StartR1Test
@ECHO 启动到所有站点的主用路由网络连通性测试...
::Center1(1.x.x.x)
@if NOT %AddrHead% EQU 1 start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 1.32.0.20 %PINGOPTIONS%"
......
@goto :ExitPing
:StartR2Test
@ECHO 启动到所有站点的备用路由2网络连通性测试...
::Center1(65.x.x.x)
@if NOT %AddrHead% EQU 65 start cmd.exe /K "title [router2-到Center01接入交换机UPLink接口-65.132.10.20]&& echo 开始测试时间%TIME% && ping 65.132.10.20 %PINGOPTIONS%"
......
@goto ExitPing
....................................
:: *********************************************************************************
:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize
:ExitPing
@ECHO.
@PAUSE
@ECHO ON && endlocal
其中,脚本内函数为
:: 子过程01 - GetFileSize
:: SubGetFileSize <<<
:SubGetFileSize
@set /A FileSize=%~z1
::@ECHO 文件%~nx1的大小为%FileSize%字节。
@goto :EOF
:: >>> SubGetFileSize
重点代码分析
start cmd.exe /K "title [router1-到Center01核心交换机WAN接口-11.132.10.20]&& echo 开始测试时间%TIME% && ping 11.132.10.20 %PINGOPTIONS%"
该语句包含start->cmd->title/echo/ping三层调用关系。其中start用来启动新的控制台窗口Win;cmd /k用来保证Win窗口在按Ctrl+C结束脚本后保持在当前窗口中,并解释执行后面的命令;title/echo/ping是依次执行的三个命令,分别设置Win窗口的标题,显示测试开始时间,进行ping测试。
特别要注意的是,
第一:title后面的[]括起来的是Win窗口的标题,而外部的“”括起来的是cmd要执行的脚本,这里是嵌套的脚本。
第二:start 可以带窗口title启动新的命令提示符窗口,但新窗口将自动采用windows官方默认的属性设置(高度、宽度、颜色等),所以,这里必须是在cmd中进行窗口title的设置。
*********************************
在下一篇《一键式Ping脚本 》中给出了一个完整的例子。
相关文章推荐
- 通过VBS编写自动输入账号和密码、自动登录程序的脚本
- abinit自动安装脚本编写方法
- Python编写的读取html文件名,自动编写SQL插入语句脚本
- Linux自动修改IP脚本(手动编写)
- SecureCRT自动登陆到服务器的脚本以及脚本编写简单说明
- SSH进阶(一):编写批量和自动执行的脚本
- PXE项目实战,通过编写脚本自动安装系统时批量部署服务器所需要的所有服务
- BAT脚本编写要点(1)_特殊字符
- shell编写tomcat自动守护脚本
- LAMP or LNMP 自动安装脚本(函数思想编写)
- Linux开机如何自动运行自己编写好的shell脚本
- Shell脚本进阶篇——编写自动判断自动创建添加用户和用户密码的脚本
- LVS集群的基本原理、LVS/NAT模式的配置、LVS/DR模式的配置、编写自动脚本检查LVS上realserver健康性
- 使用au3脚本编写自动登录126邮箱
- Linux crontab的使用方式,sh脚本的编写,sh脚本自动启动tomcat服务器,sh监控系统运行情况
- 通过VBS编写自动输入账号和密码、自动登录程序的脚本
- BAT脚本编写要点(1)_特殊字符
- 谷歌云防火墙,ping域名,自动放行IP实现脚本
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本
- shell脚本编写ping包及arp的监控并发送短信功能