You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Shell脚本根据输入端口号精准查询对应服务名称及运行状态

端口查询Shell脚本实现方案

问题原因

你之前使用的grep :80属于模糊匹配,只要输出内容中包含子串:80就会被命中,因此:8080也会被匹配到,导致结果不符合预期。

修正后的单条查询命令

使用单词边界匹配规则实现指定端口的精确匹配:

sudo netstat -lntup | grep ":${port}\b"

其中\b是正则表达式的单词边界标识,只会匹配:端口号后紧跟非单词字符(此处为端口后的空格)的情况,不会匹配到后面还有其他数字的端口(如8080)。

完整可运行Shell脚本

#!/bin/bash

# 校验输入参数是否存在
if [ $# -ne 1 ]; then
    echo "用法: $0 <端口号>"
    exit 1
fi

port=$1
# 校验端口是否为1-65535的合法正整数
if ! [[ $port =~ ^[1-9][0-9]*$ ]] || [ $port -gt 65535 ]; then
    echo "错误:请输入1-65535范围内的合法端口号"
    exit 1
fi

# 查询指定端口信息
result=$(sudo netstat -lntup | grep ":$port\b")

if [ -z "$result" ]; then
    echo "端口 $port 没有服务在监听"
else
    echo "端口 $port 监听信息如下:"
    echo "$result" | awk '{
        printf "协议: %s\n状态: %s\n服务PID/名称: %s\n", $1, $6, $7
    }'
fi

脚本使用说明

  1. 将上述内容保存为port_query.sh
  2. 赋予执行权限:chmod +x port_query.sh
  3. 执行查询:sudo ./port_query.sh 80
  4. 执行示例输出:
端口 80 监听信息如下:
协议: tcp6
状态: LISTEN
服务PID/名称: 1192/apache2

可选优化(兼容新系统)

部分新发行版已默认不预装netstat,可替换为更高效的ss命令,对应查询语句修改为:

result=$(sudo ss -lntup | grep ":$port\b")

内容的提问来源于stack exchange,提问作者Sivaganesh Tamilvendhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:18:02