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 ...
运行脚本时写位置参数,调用函数时要用$@