侦听服务端口

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 $@
效果:

wKiom1PI7MOzKl7vAACRWosxvAU653.jpg

分析:

  1. tail的使用 -n +2 是从第2行开始显示

  2. tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。

    语法:tr [�Cc/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

    1. 去除重复的字符:tr -s set1

    2. 删除空白行
      删除空白行就是删除换行符/n
      注意:这些空白行上只有回车符,没有空格符
      这里用换行符的转义字符\n
      注意:用-s删除了多余的换行符,如果用-d,则会删除所有的换行符                         

  3. 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了!

  4. 注意从文件里读取数据的使用

  5. 函数的使用

    1. 函数必须先定义再使用,这个错误一般不会出现

    2. 调用函数

      1. 调用已定义的函数,直接用函数名

      2. 可以向函数内传递参数(可以使用位置参数)示例:函数名 参数1 参数2 ...

      3. 运行脚本时写位置参数,调用函数时要用$@


你可能感兴趣的:(监听端口)