天天看点

侦听服务端口

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 ...

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