shell脚本获取本机端口号

jason110163 2013-01-05 02:29:04
#netstat -tln

-----输出如下-------
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:427 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:2544 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::1:25 :::* LISTEN

-------------------------
想得到的输出结果如下:
5801,427,5901,111,2544,631,25,22

请问shell语句要怎么写?
...全文
315 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jason110163 2013-01-06
  • 打赏
  • 举报
回复
#1 @nicenight 输出结果基本正确,但端口没剔重 #3 @zhangtie8527 输出结果完全正确 #4 @ljc007 输出结果不正确 #5 @ljc007 输出结果不正确 #6 @fdl19881 输出有误,不过| sort | uniq | tr '\r\n' ','结合#1的语法,可以正常剔重,并排序输出。但是最后以为会多个逗号。 综述给分如下 #1 @nicenight 5分 #3 @zhangtie8527 8分 #4 @ljc007 1分 #5 @ljc007 1分 #6 @fdl19881 5分 谢谢大家的帮助!
fdl19881 2013-01-05
  • 打赏
  • 举报
回复
引用 2 楼 jason110163 的回复:
引用 1 楼 nicenight 的回复:C/C++ code?1[nicenight@CSDN ~]# netstat -tln | awk 'BEGIN{ORS=","}; NR>2{sub(".*:", "", $4); print $4}' 厉害,基本实现了我想要的效果,不过没有过滤重复端口。 会输出两个25 5801,427,5901,111,25……
netstat -tln | awk 'NR>2{sub(".*:", print $4}' | sort | uniq | tr '\r\n' ','
去重的。
ljc007 2013-01-05
  • 打赏
  • 举报
回复
netstat -tln | awk -F '[: ]+' 'NR>2{printf $5","}END{print ""}'
ljc007 2013-01-05
  • 打赏
  • 举报
回复
netstat -tln | awk -F '[: ]+' 'NR>2{printf $5","}'
fyz_Winnie 2013-01-05
  • 打赏
  • 举报
回复
命令: #netstat -tln | awk '{if($1=="tcp"){num=split($4,A,":");B[A[num]]++;if(B[A[num]]==1)str=str""A[num]","}}END{print substr(str,1,length(str)-1)}' #cat test.txt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:427 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:2544 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 :::22 :::* LISTEN tcp 0 0 ::1:25 :::* LISTEN ------------------------- #awk '{if($1=="tcp"){num=split($4,A,":");B[A[num]]++;if(B[A[num]]==1)str=str""A[num]","}}END{print substr(str,1,length(str)-1)}' test.txt 5801,427,5901,111,2544,631,25,22
jason110163 2013-01-05
  • 打赏
  • 举报
回复
引用 1 楼 nicenight 的回复:
C/C++ code?1[nicenight@CSDN ~]# netstat -tln | awk 'BEGIN{ORS=","}; NR>2{sub(".*:", "", $4); print $4}'
厉害,基本实现了我想要的效果,不过没有过滤重复端口。 会输出两个25 5801,427,5901,111,2544,631,25,22,25
nicenight 2013-01-05
  • 打赏
  • 举报
回复
[nicenight@CSDN ~]# netstat -tln | awk 'BEGIN{ORS=","}; NR>2{sub(".*:", "", $4); print $4}'

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧