脚本代码
bash
#!/bin/bash
# 加载bash配置(补充环境变量,避免遗漏)
source ~/.bashrc 2>/dev/null # 重定向错误输出,避免无配置时的报错
# ======================== 参数基础校验 ========================
# 检查是否至少输入1个端口号
if [ $# -eq 0 ]; then
echo "❌ 用法错误!请至少输入1个端口号作为参数。"
echo "✅ 正确用法: $0 <端口号1> [端口号2] [端口号3] ..."
echo "📌 示例: $0 80 8080 9090 3306"
exit 1
fi
# ======================== 定义查询函数 ========================
# 封装查询端口的函数,入参:目标端口号
check_port() {
local target_port=$1
echo "========================================"
echo "正在查询端口 $target_port 的占用情况..."
echo "========================================"
# 1. 先校验端口号是否为有效数字(0-65535是合法端口范围)
if ! [[ "$target_port" =~ ^[0-9]+$ ]]; then
echo "❌ 端口号 $target_port 无效:必须是纯数字!"
echo ""
return # 跳过当前端口,继续处理下一个
fi
if [ "$target_port" -lt 0 ] || [ "$target_port" -gt 65535 ]; then
echo "❌ 端口号 $target_port 无效:合法端口范围是 0-65535!"
echo ""
return
fi
# 2. 执行端口查询(sudo需root权限,查询进程信息必须)
port_info=$(sudo ss -tulnp | grep ":$target_port" 2>/dev/null)
# 3. 输出查询结果
if [ -n "$port_info" ]; then
echo "✅ 端口 $target_port 已被占用,详细信息:"
echo "$port_info"
else
echo "❌ 端口 $target_port 未被占用(或无权限查看进程信息)。"
fi
echo "" # 空行分隔,提升可读性
}
# ======================== 遍历所有输入的端口并查询 ========================
echo "📋 开始查询指定的端口(共 $# 个)..."
echo ""
# 遍历所有命令行传入的端口号($@ 表示所有参数)
for port in "$@"; do
check_port "$port"
done
echo "✅ 所有端口查询完成!"
脚本使用方法
-
保存脚本为
check_ports.sh; -
赋予执行权限:
chmod +x check_ports.sh -
运行脚本(输入任意数量端口号):
# 示例1:查询1个端口 ./check_ports.sh 8080 # 示例2:查询3个端口 ./check_ports.sh 80 8080 3306 # 示例3:查询5个端口 ./check_ports.sh 22 443 9090 6379 8888
示例输出
📋 开始查询指定的端口(共 3 个)...
========================================
正在查询端口 80 的占用情况...
========================================
✅ 端口 80 已被占用,详细信息:
tcp LISTEN 0 100 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=789,fd=6))
========================================
正在查询端口 8080 的占用情况...
========================================
❌ 端口 8080 未被占用(或无权限查看进程信息)。
========================================
正在查询端口 99999 的占用情况...
========================================
❌ 端口号 99999 无效:合法端口范围是 0-65535!
✅ 所有端口查询完成!
总结
要想更换查询命令命令,可更改下方红色部分
port_info=(**sudo ss -tulnp \| grep** ":target_port" 2>/dev/null)