天天看點

偵聽服務端口

myport(){

  for i

  do

    lsof -i:$i |tail -n +2 |tr -s ' ' |cut -d ' ' -f1,8 |sort |uniq >port

    if ` -s port `

    then

      while read ser pro

      do

        echo $ser is listening : $pro $i port

      done<port

    else

        echo $i port is not listening

    fi

  done

}

myport $@

效果:

偵聽服務端口

分析:

tail的使用 -n +2 是從第2行開始顯示

tr(translate縮寫)主要用于删除檔案中的控制字元,或進行字元轉換。

文法:tr [–c/d/s/t] [SET1] [SET2]

SET1: 字元集1

SET2:字元集2

-c:complement,用SET2替換SET1中沒有包含的字元

-d:delete,删除SET1中所有的字元,不轉換

-s: squeeze-repeats,壓縮SET1中重複的字元

-t: truncate-set1,将SET1用SET2轉換,一般預設為-t

去除重複的字元:tr -s set1

删除空白行

删除空白行就是删除換行符/n

注意:這些空白行上隻有回車符,沒有空格符

這裡用換行符的轉義字元\n

注意:用-s删除了多餘的換行符,如果用-d,則會删除所有的換行符                         

cut的使用

cut指令主要是接受三個定位方法:

第一,位元組(bytes),用選項-b

第二,字元(characters),用選項-c

第三,域(fields),用選項-f

-b支援形如3-5的寫法,而且多個定位之間用逗号隔開就成

但有一點要注意,cut指令如果使用了-b選項,那麼執行此指令時,cut會先把-b後面所有的定位進行從小到大排序,然後再提取。可不能颠倒定位的順序哦

-3表示從第一個位元組到第三個位元組,而3-表示從第三個位元組到行尾。如果你細心,你可以看到這兩種情況下,都包括了第三個位元組“c”。

如果我執行who|cut -b -3,3-,你覺得會如何呢?答案是輸出整行,不會出現連續兩個重疊的c的

如果你觀察過/etc/passwd檔案,你會發現,它并不像who的輸出資訊那樣具有固定格式,而是比較零散的排放。但是,冒号在這個檔案的每一行中都起到了非常重要的作用,冒号用來隔開每一個項。

我們很幸運,cut指令提供了這樣的提取方式,具體的說就是設定“間隔符”,再設定“提取第幾個域”,就OK了!

注意從檔案裡讀取資料的使用

函數的使用

函數必須先定義再使用,這個錯誤一般不會出現

調用函數

調用已定義的函數,直接用函數名

可以向函數内傳遞參數(可以使用位置參數)示例:函數名 參數1 參數2 ...

運作腳本時寫位置參數,調用函數時要用$@