Shell腳本編程-生成TCP活動狀況報告_第1頁
Shell腳本編程-生成TCP活動狀況報告_第2頁
Shell腳本編程-生成TCP活動狀況報告_第3頁
Shell腳本編程-生成TCP活動狀況報告_第4頁
Shell腳本編程-生成TCP活動狀況報告_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、LINUX編程環(huán)境實驗報告2B-Shell及編程班級: 姓名:LZ寫在前面親愛的學(xué)弟/學(xué)妹,如果你正因為本次實驗而困惑,希望你在看完本文后會幫你解惑。但并不希望你直接copy后上交,自己親手做實驗而得到的提升是只有做完實驗才知道的,而且可能會發(fā)現(xiàn)一些有意思的問題。相信這次實驗也不會花費太長時間。加油,少年一、 實驗內(nèi)容Shell腳本編程,生成TCP活動狀況報告。 netstat -statistics -tcp命令可以列出tcp統(tǒng)計信息。編寫shell腳本程序,每隔1分鐘生成1行信息:當(dāng)前時間;這一分鐘內(nèi)TCP發(fā)送了多少報文;接收了多少報文;收發(fā)報文總數(shù);行尾給出符號+或-或空格(+表示這分鐘

2、收發(fā)報文總數(shù)比上分鐘多,收發(fā)報文總數(shù)相同用空格,否則用符號-)。運行示例如下:觀察示例后,又發(fā)現(xiàn)了兩個需要注意的細節(jié): 第一行的最后一個參數(shù)必定是空格; 輸出要對齊此外,在實驗中發(fā)現(xiàn)netstat -statistics tcp命令的收發(fā)報文數(shù)所在的行數(shù)是變動的,受ICMPMSG長度的影響。但本程序可以做到不受變動行數(shù)的影響,準確提取收發(fā)報文數(shù)。詳情將在第三、3和第四部分闡述。二、 實驗步驟及分析經(jīng)過分析,該程序分4步完成:每隔1分鐘生成一行信息、當(dāng)前時間、一分鐘內(nèi)首發(fā)報文數(shù)及收發(fā)總數(shù)和根據(jù)收發(fā)總數(shù)的變化行尾給出符號+或-或空格。下面,將針對這4個步驟分別進行闡述。1. 每隔1分鐘生成1行信息

3、要實現(xiàn)這點,只需要一個簡單的循環(huán)結(jié)構(gòu)即可:while truedo echo “” sleep 60done2. 當(dāng)前時間使用date命令的格式化輸出。%F是以xxxx-xx-xx的形式打印年月日;%H是兩位數(shù)長的24小時的小時數(shù);%M為分鐘數(shù)。打印效果如下:3. 這一分鐘內(nèi)TCP收、發(fā)報文數(shù)以及收發(fā)報文總數(shù)首先,使用netstat -statistics tcp命令查看命令的格式:可見,所需的數(shù)據(jù)被白框圈出,當(dāng)前累計的收發(fā)報文數(shù)分別在第10和第11行??梢允褂肁WK命令進行提取,條件為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)但是,在實踐中發(fā)現(xiàn),所需的兩個數(shù)據(jù)位置是不定的,受IcmpMsg長度的影響,有兩種解決方案: 每次手動修改NR后面的值; 用segments received和segments send out匹配需要的行,然后提起該行的第一個變量。顯然第2個解決方案是用戶所期望的。所以,語句這樣改正,即可實現(xiàn)準確提取收、發(fā)報文數(shù)而不受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)這樣,提取累計收、發(fā)報文數(shù)就完成了。但本次實驗要求列出的數(shù)據(jù)是某一分鐘內(nèi)的。那么就在一分鐘開始的時候記錄一次累計收、發(fā)報文數(shù);60秒后再記錄一次累計收、發(fā)報文數(shù)。將兩次記錄相減就是一分鐘內(nèi)的收、發(fā)報文數(shù);將一分鐘內(nèi)的收、發(fā)報文數(shù)相加,就是一分鐘內(nèi)的收發(fā)報文總數(shù)。4

6、. 行尾給出符號+或-或空格行尾符號是+、-或空格,取決于本分鐘收發(fā)報文總數(shù)和前一分鐘收發(fā)報文總數(shù)的大小關(guān)系:大為+、相等為空格,否則為-。所以,這部分代碼如下:if $total -gt $total_before then More=+ elif $total -eq $total_before then More= else More=- fi正如第一部分所述,本程序中的一個細節(jié)是第一行數(shù)據(jù)的尾部必為空格,所以將第一部分提到while循環(huán)之外,尾部直接輸出空格。三、 實驗結(jié)果四、 問題與解決1. 問題: 程序剛開始是正常的,可以反應(yīng)收、發(fā)報文數(shù)的變化,但后來再調(diào)試的時候,數(shù)據(jù)全部為0。解

7、答:netstat -statistics tcp命令中,收、發(fā)報文累計值所在行會發(fā)生變化,由IcmpMsg長度的變化引起。之前程序提取收、發(fā)報文累計值是用行數(shù)提取的。但后來行數(shù)發(fā)生了變化,提取的值是在這段時間不變的值,所以導(dǎo)致了上述情況。將提取策略改變后即可: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函數(shù)進行格式化輸出即可。 printf %-22s%-8s%-8s%-8s%-8sn $DateandTime $recieve $send $total $More3. 問題:這個地方為什么報錯?解答:if語句后,“”和“ ”需要和邏輯判斷語句用空格隔開。Shell中的空格十分十分重要!命令需要用空格來提取參數(shù)!參考文獻:1 實用UNIX教程蔣硯軍 清華大學(xué)出版社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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論