Shell脚本编程,生成TCP活动状况报告
- 格式:docx
- 大小:153.15 KB
- 文档页数:8
Shell编程实验报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat>new_script⑵输入下列行:echo“Yourfilesare”lsecho“todayis”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:catnew_script⑷运行脚本,输入它的文件名:new_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls–lnew_script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod+xnew_script⑺要查看新的权限,输入:ls–l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:new_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:commandnotfound输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
程序运行过程如下:2、用Shell语言编制一Shell程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。
程序运行过程如下:3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“Endofprogram”,如果不同则显示“Endofprogram”。
程序运行过程如下:4、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Notmatch”,最后显示“Endofprogram”。
请使用if…then…else控制结构。
shell系统实验报告《Shell系统实验报告》摘要:本实验通过对shell系统的学习和实践,对shell脚本编程进行了深入的研究和探讨。
通过实验,我们深入了解了shell系统的基本概念、语法和功能,并通过实际编程实践加深了对shell脚本的理解和掌握。
本实验报告将对实验过程、实验结果和实验感想进行详细的介绍和分析。
一、实验目的通过本次实验,我们的主要目的是深入了解shell系统的基本概念和语法,掌握shell脚本编程的基本方法和技巧,提高对Linux系统的操作和管理能力。
二、实验过程1. 学习shell系统的基本概念和语法规则;2. 编写简单的shell脚本,包括文件操作、流程控制、函数定义等;3. 运行和调试编写的shell脚本,检验脚本的正确性和可靠性;4. 分析实验结果,总结实验感想。
三、实验结果通过本次实验,我们深入了解了shell系统的基本概念和语法规则,掌握了shell 脚本编程的基本方法和技巧。
我们成功编写了一些简单的shell脚本,包括文件操作、流程控制、函数定义等,通过运行和调试这些脚本,我们验证了它们的正确性和可靠性。
实验结果表明,我们对shell系统有了更深入的认识和理解,对Linux系统的操作和管理能力得到了提高。
四、实验感想通过本次实验,我们对shell系统有了更深入的认识和理解,对Linux系统的操作和管理能力得到了提高。
我们深刻体会到了shell脚本编程的重要性和实用性,相信在今后的工作和学习中,我们会更加熟练地运用shell系统,提高工作效率和解决实际问题。
同时,我们也意识到了自己在shell系统方面的不足之处,今后需要进一步学习和实践,不断提高自己的技能水平。
综上所述,本次实验对我们的学习和成长都具有重要意义,我们将继续努力学习和提高自己,在shell系统和Linux系统方面取得更大的进步和成就。
linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。
通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。
在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。
一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。
实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。
二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。
通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。
在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。
这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。
三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。
通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。
在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。
四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。
通过实验,我掌握了两种常见的循环结构:for循环和while循环。
在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。
五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。
Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。
Linux Shell 编程实验总结1.引言本文档总结了在学习Li nu xS he ll编程过程中的实验经验和心得体会。
通过对L in ux Sh el l编程实验的实施和总结,我们能够更好地理解S h el l脚本的运行机制,掌握Sh el l脚本的基本语法和常用命令,提高编写高效、精确的Sh e ll脚本的能力。
2.实验一:S hell 脚本基础2.1实验目的本实验旨在帮助学员熟悉Sh el l脚本的基本语法和常用命令,掌握脚本的编写与执行方法。
2.2实验内容在本实验中,我们学习了如何编写具有特定功能的Sh el l脚本,如输出H el lo Wo rl d、计算两个数之和、判断文件是否存在等。
2.3实验心得通过本实验的实施,我对Sh el l脚本的基本语法有了更深入的理解。
在编写脚本的过程中,我发现使用变量、条件判断和循环结构可以极大地提高脚本的灵活性和实用性。
同时,我也加深了对常用命令的认识和掌握,如e ch o、re ad、i f-e ls e、fo r循环等。
这些基本的知识将为后续的实验和项目实践打下坚实的基础。
3.实验二:文件和目录操作3.1实验目的本实验旨在帮助学员了解Li nu x文件系统的基本操作,掌握S he ll脚本中与文件和目录相关的命令。
3.2实验内容在本实验中,我们学习了如何创建、复制、重命名和删除文件、目录,以及如何查询文件和目录的属性信息等。
3.3实验心得通过本实验的实施,我对Li nu x文件系统有了更深入的了解。
我学会了如何使用S he ll脚本快速处理文件和目录,并且能够根据需求编写相应的脚本来操作文件。
例如,通过使用fi n d命令来查找文件,使用g r ep命令来搜索文件内容等。
这些技能在日常工作中非常有用,能够提高工作效率和准确性。
4.实验三:文本处理4.1实验目的本实验旨在帮助学员掌握Sh el l脚本中处理文本的常用命令和技巧,能够快速有效地处理常见的文本数据。
从时间服务器读取时间:[chengmo@centos5 html]$ cat</dev/tcp//13 55491 10-10-22 11:33:49 17 0 0 596.3 UTC(NIST) *是不是由于sleep后,echo会推出2秒发给通道:telnet呢?推论可以从这2个方面推翻:一个方面:通过()括的数据是一对命令,会作为一个子命令执行,一起执行完程序结束。
每个命令echo语句,就直接发送到屏幕(也就是标准输出),只要有标准输出了,就会通过通道马上传个:telnet ,如果接下来命令还有输出,会注意传给telnet ,直到()内所有命令执行完,与通道连接就断开了。
再一个方面:如果说是起到推迟发送的话,什么时候有数据过来,发给telnet,什么时候telnet命令启动。
跟你推迟一点还是早一点发送过来。
没有关系。
这种类型命令,看出sleep,其实就是保持通道跟telnet 连接2秒钟。
通道连接着了,telnet 终端输入也还在,因此可以保持从baidu服务器获得数据。
所以,延迟多久,还是跟服务器处理速度有关系。
如果通过echo 向telnet发送数据,保持通道联通,使用sleep是个很好方法。
通过重定向给telnet输入参数这种方法,我还想不到怎么样实现延迟输入。
有知道朋友,可以指点指点.区别:telnet与echo 实现http访问,与通过打开读写socket是不一样的,打开socket通道,是可以进行交换处理的。
传入命令,活动结果,再传入命令,再获得结果。
telnet通过echo 就不能这样处理了。
三、通过shell脚本重定向实现监控memcache状态实例:1 2 3 4 #!/bin/sh#通过传入ip 以及端口,发送指令获得返回数据#copyright chengmo qq:8292669这是通过重定向,实现socket通讯中,发送然后获取返回的例子。
其实,上面代码看似一次只能发送一段。
shell命令总结实验报告shell 命令总结第⼀章实验思路1 运⾏环境VMware软件、CentOS 7、MobaXterm第⼆章实验⽬的1 掌握Linux的使⽤。
2 掌握shell常⽤命令。
3 掌握MobaXterm软件的使⽤第三章实验步骤Shell:多任务多⽤户系统3.1 终端物理终端:直接连接到的是键盘、⿏标 /dev/console虚拟终端:(/dev/tty)基于物理终端,以软件形式实现的登录⽅式,以ctrl+alt+Fn[1-6],centos 7模拟终端:(/dev/pts/)基于物理终端,以软件形式实现的登陆⽅式,通过ssh、telent远程登录的、(可以有很多个,⽆穷多个),在图形界⾯打开的命令⾏3.1.1 终端交互式接⼝GUI:图形界⾯,GNOME,KDE, XFCECLI: 命令⾏,shell3.2 shell 应⽤程序/bin/sh/bin/bash ⽐较常⽤shell,跟随⽤户启动的独⽴程序/usr/bin/sh/usr/bin/bash/bin/tcsh/bin/csh3.3 命令提⽰符#:管理员使⽤的命令提⽰符$: 普通⽤户使⽤的命令提⽰符3.4 命令3.4.1 shell 内嵌命令,执⾏效率⾼,常驻内存shell外部命令,根据需要执⾏which whereis 查找外部命令的位置3.4.2 帮助⽂档help,主要针对内嵌man(manual),主要针对外部命令3.4.3 主要命令1. echo $SHELL 查看当前使⽤的shell程序,当系统登录shell时默认使⽤的是/bin/bash2. exit 退出当前shell3. cat /etc/shells查看设备安装的所有shell程序4. pstree 查看进程树5. tty 查看登录⽅式 TTY查看登陆⽅式,tty1说明是在终端上登陆的。
pts说明是远程登陆的,0说明为从Window上登陆的。
6. type 查看是内部命令还是外部命令如下,查看cd 和ls命令7.enable -a 查看所有内嵌命令8. which 查看外部命令位置(以及帮助信息)9. whereis 查看外部命令位置10. man 查看外部命令使⽤说明,如man ls(ls 为外部命令)11. help 查看内部命令的使⽤说明,如help cd( cd 为内部命令),当⽤help查看ls这个外部命令时,是查询不出来的12. whatis 查看和更新数据库信息(帮助⽂档)1. ctrl+c 终⽌shell命令第四章问题解决没有注意到⼀些路径的设置,然后出现了些错误或者命令没执⾏成功。
高级Shell脚本编写技巧利用日志分析和统计脚本运行数据高级Shell脚本编写技巧:利用日志分析和统计脚本运行数据在开发Shell脚本时,日志分析和统计是非常重要的一部分。
通过分析和统计脚本运行的数据,我们可以得出有用的信息,帮助我们优化脚本的性能,改进其稳定性。
本文将介绍一些高级Shell脚本编写技巧,以帮助我们更好地利用日志分析和统计脚本运行数据。
一、使用日志文件记录运行数据日志文件是Shell脚本运行过程中非常重要的记录工具。
通过将关键信息写入日志文件,我们可以方便地进行后续分析和统计。
在脚本中,我们可以使用"echo"或者"printf"命令将关键信息输出到日志文件中,例如:```shellecho "脚本运行开始时间:$(date)" >> script.log```上述命令将当前时间以追加方式写入到script.log日志文件中。
二、使用grep分析日志文件grep是一个强大的文本搜索工具,我们可以使用它来分析日志文件中的脚本运行数据。
grep支持各种正则表达式,可以根据我们的需求进行灵活的日志分析。
例如,我们可以使用grep命令查找日志文件中的特定字符串,并计算出出现次数,例如:```shellgrep -c "error" script.log```上述命令将统计script.log文件中出现"error"的次数。
三、使用awk进行日志统计awk是一种功能强大的文本处理工具,我们可以使用它进行更复杂的日志统计分析。
awk以每行作为处理单位,可以通过设置特定的分隔符对每行进行拆分,并对拆分后的字段进行处理。
例如,我们可以使用awk来计算日志文件中某个字段的总和、平均值等,例如:```shellawk '{sum += $3} END {print "总和:"sum}' script.log```上述命令将计算script.log文件中第三个字段的总和,并将结果打印出来。
Linux系统文件完整性检查脚本使用Shell脚本检查文件完整性并生成报告在Linux系统中,文件的完整性对于系统的安全和稳定性至关重要。
为了确保文件在运行过程中没有被篡改或损坏,可以使用Shell脚本来进行文件完整性检查,并生成相应的报告。
本文将介绍如何编写一个简单的Shell脚本来执行该任务。
脚本的主要功能包括以下几个方面:1. 获取指定目录下的所有文件及其相关信息;2. 计算每个文件的校验和(例如MD5);3. 将文件的路径、校验和和文件大小记录到报告中;4. 将报告保存到指定的输出文件。
首先,我们需要定义一些变量来存储相关信息。
使用`date`命令获取当前日期和时间,并将其保存到变量`timestamp`中。
再定义变量`report_file`来指定报告文件的路径和名称。
```#!/bin/bashtimestamp=$(date +"%Y%m%d%H%M%S")report_file="/path/to/report_${timestamp}.txt"```接下来,我们需要定义一个函数来计算文件的校验和。
这里以MD5为例,使用`md5sum`命令来计算文件的MD5值,并将结果保存到变量`checksum`中。
```calculate_checksum() {local file="$1"local checksum=$(md5sum "$file" | awk '{print $1}')echo "$checksum"}```然后,我们可以编写一个循环来遍历指定目录下的所有文件,并执行文件完整性检查。
使用`find`命令来查找指定目录下的所有文件,并将结果逐行传递给循环。
```directory="/path/to/directory"find "$directory" -type f | while read file; dochecksum=$(calculate_checksum "$file")size=$(du -b "$file" | awk '{print $1}')echo "$file,$checksum,$size" >> "$report_file"done```在每次循环中,我们调用`calculate_checksum`函数来计算文件的校验和,并使用`du`命令获取文件大小。
高级Shell脚本编写技巧利用日志记录和监控脚本运行情况高级Shell脚本编写技巧:利用日志记录和监控脚本运行情况Shell脚本是一种强大的工具,可以帮助我们自动化任务,并提高工作效率。
在编写高级Shell脚本时,使用日志记录和监控脚本运行情况是非常重要的。
本文将分享一些关于如何利用日志记录和监控Shell脚本运行情况的技巧。
1. 使用日志记录脚本运行情况在编写Shell脚本时,可以使用日志记录来记录脚本的运行情况。
通过记录各个步骤的执行情况和输出信息,我们可以更好地了解脚本的执行过程,并及时发现问题。
以下是一个示例:```shell#!/bin/bashLOG_FILE="/var/log/my_script.log"# 检查日志文件是否存在,不存在则创建if [ ! -f "$LOG_FILE" ]; thentouch "$LOG_FILE"fi# 记录日志函数log() {echo "$(date +'%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE"}# 记录脚本开始时间log "脚本开始执行"# 以下是脚本的具体逻辑# ...# 记录脚本结束时间log "脚本执行完毕"```在上述示例中,我们首先定义了一个日志文件的路径,然后在脚本的开始和结束处调用`log`函数,将相应的日志信息写入日志文件中。
通过这种方式,我们可以随时查看脚本的执行情况,并追踪问题。
2. 监控脚本运行情况除了使用日志记录脚本的运行情况外,我们还可以通过监控来实时获取脚本的运行状态。
这样我们可以及时发现脚本的异常情况,并采取相应的措施。
以下是一些常用的监控技巧:2.1 设置警报机制通过设置警报机制,当脚本运行出现异常时,可以及时通知相应的人员。
S h e l l编程实验报告 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】南京信息工程大学实验(实习)报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell 脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat >new_script⑵输入下列行:echo “Your files are”lsecho “today is”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:cat new_script⑷运行脚本,输入它的文件名:new_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls –l new _script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod +x new_script⑺要查看新的权限,输入:ls –l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:new_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:command not found输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
程序运行过程如下:2、用Shell 语言编制一Shell 程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。
程序运行过程如下:3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program”。
程序运行过程如下:4、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Not match”,最后显示“End of program”。
LINUX编程环境实验报告2——B-Shell及编程班级:2012211307 姓名:LZ写在前面亲爱的学弟/学妹,如果你正因为本次实验而困惑,希望你在看完本文后会帮你解惑。
但并不希望你直接copy后上交,自己亲手做实验而得到的提升是只有做完实验才知道的,而且可能会发现一些有意思的问题。
相信这次实验也不会花费太长时间。
加油,少年~一、实验内容Shell脚本编程,生成TCP活动状况报告。
netstat --statistics --tcp命令可以列出tcp统计信息。
编写shell脚本程序,每隔1分钟生成1行信息:当前时间;这一分钟内TCP发送了多少报文;接收了多少报文;收发报文总数;行尾给出符号+或-或空格(+表示这分钟收发报文总数比上分钟多,收发报文总数相同用空格,否则用符号-)。
运行示例如下:观察示例后,又发现了两个需要注意的细节:①第一行的最后一个参数必定是空格;②输出要对齐此外,在实验中发现netstat --statistics –tcp命令的收发报文数所在的行数是变动的,受ICMPMSG长度的影响。
但本程序可以做到不受变动行数的影响,准确提取收发报文数。
详情将在第三、3和第四部分阐述。
二、实验步骤及分析经过分析,该程序分4步完成:每隔1分钟生成一行信息、当前时间、一分钟内首发报文数及收发总数和根据收发总数的变化行尾给出符号+或-或空格。
下面,将针对这4个步骤分别进行阐述。
1.每隔1分钟生成1行信息要实现这点,只需要一个简单的循环结构即可:while truedoecho “……”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_before=$(netstat --statistics --tcp | awk 'NR == 10{print $1}')send_total_before=$(netstat --statistics --tcp | awk 'NR == 11{print $1}')但是,在实践中发现,所需的两个数据位置是不定的,受IcmpMsg长度的影响,有两种解决方案:①每次手动修改NR后面的值;②用segments received和segments send out匹配需要的行,然后提起该行的第一个变量。
显然第2个解决方案是用户所期望的。
所以,语句这样改正,即可实现准确提取收、发报文数而不受netstat命令变化的影响: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.行尾给出符号+或-或空格行尾符号是+、-或空格,取决于本分钟收发报文总数和前一分钟收发报文总数的大小关系:大为‘+’、相等为空格,否则为‘-’。
所以,这部分代码如下:if [ $total -gt $total_before ]thenMore='+'elif [ $total -eq $total_before ]thenMore=' 'elseMore='-'fi正如第一部分所述,本程序中的一个细节是第一行数据的尾部必为空格,所以将第一部分提到while循环之外,尾部直接输出空格。
三、实验结果四、问题与解决1.问题: 程序刚开始是正常的,可以反应收、发报文数的变化,但后来再调试的时候,数据全部为0。
解答: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.问题:程序的输出使用echo命令,不整齐怎么办?解答:使用printf函数进行格式化输出即可。
printf "%-22s%-8s%-8s%-8s%-8s\n" "$DateandTime" "$recieve" "$send" "$total" "$More"3.问题:这个地方为什么报错?解答:if语句后,“[”和“ ]”需要和逻辑判断语句用空格隔开。
Shell中的空格十分十分重要!命令需要用空格来提取参数!参考文献:[1] 《实用UNIX教程》蒋砚军清华大学出版社[2] 《LINUX Shell脚本编程入门》[3] 《Unix shell脚本编程,生成TCP活动状况报告》/link?url=qgCU4uuV_pjOf6tSoYVnBhPo2epZP-ILrA8wNTBGUnreF6c8e_Dxg PTOAPzJjPWkybKG7uU-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/{print $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)total_before=$totalprintf "%-22s%-8s%-8s%-8s\n" "$DateandTime" "$recieve" "$send" "$total"while truedorecieve_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 60DateandTime=$(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 [ $total -gt $total_before ]thenMore='+'elif [ $total -eq $total_before ]thenMore=' 'elseMore='-'fitotal_before=$totalprintf "%-22s%-8s%-8s%-8s%-8s\n" "$DateandTime" "$recieve" "$send" "$total" "$More" done。