Shell脚本编程-生成TCP活动状况报告_第1页
Shell脚本编程-生成TCP活动状况报告_第2页
Shell脚本编程-生成TCP活动状况报告_第3页
Shell脚本编程-生成TCP活动状况报告_第4页
Shell脚本编程-生成TCP活动状况报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LINUX编程环境实验报告2B-Shell及编程班级: 姓名:LZ写在前面亲爱的学弟/学妹,如果你正因为本次实验而困惑,希望你在看完本文后会帮你解惑。但并不希望你直接copy后上交,自己亲手做实验而得到的提升是只有做完实验才知道的,而且可能会发现一些有意思的问题。相信这次实验也不会花费太长时间。加油,少年一、 实验内容Shell脚本编程,生成TCP活动状况报告。 netstat -statistics -tcp命令可以列出tcp统计信息。编写shell脚本程序,每隔1分钟生成1行信息:当前时间;这一分钟内TCP发送了多少报文;接收了多少报文;收发报文总数;行尾给出符号+或-或空格(+表示这分钟

2、收发报文总数比上分钟多,收发报文总数相同用空格,否则用符号-)。运行示例如下:观察示例后,又发现了两个需要注意的细节: 第一行的最后一个参数必定是空格; 输出要对齐此外,在实验中发现netstat -statistics tcp命令的收发报文数所在的行数是变动的,受ICMPMSG长度的影响。但本程序可以做到不受变动行数的影响,准确提取收发报文数。详情将在第三、3和第四部分阐述。二、 实验步骤及分析经过分析,该程序分4步完成:每隔1分钟生成一行信息、当前时间、一分钟内首发报文数及收发总数和根据收发总数的变化行尾给出符号+或-或空格。下面,将针对这4个步骤分别进行阐述。1. 每隔1分钟生成1行信息

3、要实现这点,只需要一个简单的循环结构即可:while truedo echo “” sleep 60done2. 当前时间使用date命令的格式化输出。%F是以xxxx-xx-xx的形式打印年月日;%H是两位数长的24小时的小时数;%M为分钟数。打印效果如下:3. 这一分钟内TCP收、发报文数以及收发报文总数首先,使用netstat -statistics tcp命令查看命令的格式:可见,所需的数据被白框圈出,当前累计的收发报文数分别在第10和第11行。可以使用AWK命令进行提取,条件为NR = 10 和NR = 11 ,每行都是提取第一个变量,即$1。所以使用语句:recieve_total

4、_before=$(netstat -statistics -tcp | awk NR = 10print $1)send_total_before=$(netstat -statistics -tcp | awk NR = 11print $1)但是,在实践中发现,所需的两个数据位置是不定的,受IcmpMsg长度的影响,有两种解决方案: 每次手动修改NR后面的值; 用segments received和segments send out匹配需要的行,然后提起该行的第一个变量。显然第2个解决方案是用户所期望的。所以,语句这样改正,即可实现准确提取收、发报文数而不受netstat命令变化的影响:

5、recieve_total_before=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1)send_total_before=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1)这样,提取累计收、发报文数就完成了。但本次实验要求列出的数据是某一分钟内的。那么就在一分钟开始的时候记录一次累计收、发报文数;60秒后再记录一次累计收、发报文数。将两次记录相减就是一分钟内的收、发报文数;将一分钟内的收、发报文数相加,就是一分钟内的收发报文总数。4

6、. 行尾给出符号+或-或空格行尾符号是+、-或空格,取决于本分钟收发报文总数和前一分钟收发报文总数的大小关系:大为+、相等为空格,否则为-。所以,这部分代码如下:if $total -gt $total_before then More=+ elif $total -eq $total_before then More= else More=- fi正如第一部分所述,本程序中的一个细节是第一行数据的尾部必为空格,所以将第一部分提到while循环之外,尾部直接输出空格。三、 实验结果四、 问题与解决1. 问题: 程序刚开始是正常的,可以反应收、发报文数的变化,但后来再调试的时候,数据全部为0。解

7、答:netstat -statistics tcp命令中,收、发报文累计值所在行会发生变化,由IcmpMsg长度的变化引起。之前程序提取收、发报文累计值是用行数提取的。但后来行数发生了变化,提取的值是在这段时间不变的值,所以导致了上述情况。将提取策略改变后即可:recieve_total_before=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1)send_total_before=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1)2

8、. 问题:程序的输出使用echo命令,不整齐怎么办?解答:使用printf函数进行格式化输出即可。 printf %-22s%-8s%-8s%-8s%-8sn $DateandTime $recieve $send $total $More3. 问题:这个地方为什么报错?解答:if语句后,“”和“ ”需要和逻辑判断语句用空格隔开。Shell中的空格十分十分重要!命令需要用空格来提取参数!参考文献:1 实用UNIX教程蒋砚军 清华大学出版社2 LINUX Shell脚本编程入门3 Unix shell脚本编程,生成TCP活动状况报告/link?url=q

9、gCU4uuV_pjOf6tSoYVnBhPo2epZP-ILrA8wNTBGUnreF6c8e_DxgPTOAPzJjPWkybKG7uU-K6PEy98biDAU8ls3K2lpHVuhu2bwpjjjxwG附:源代码DateandTime=$(date +%F %H:%M)recieve_total_before=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1)send_total_before=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/p

10、rint $1)sleep 60recieve_total=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1)send_total=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1)recieve=$(expr $recieve_total - $recieve_total_before)send=$(expr $send_total - $send_total_before)total=$(expr $recieve + $send)t

11、otal_before=$totalprintf %-22s%-8s%-8s%-8sn $DateandTime $recieve $send $totalwhile truedo recieve_total_before=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1) send_total_before=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1) sleep 60 DateandTime=$(date +%F %H:%M) recieve_total=$(netstat -statistics -tcp | awk $2$3/segmentsreceived/print $1) send_total=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1) recieve=$(expr $recieve_total - $recieve_total_before) send=$(expr $send_total - $send_total_before) total=$(expr $recieve + $send) if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论