#!/usr/bin/env bash set -euo pipefail if [ $# -ne 1 ]; then echo "Usage: isportfree " >&2 exit 1 fi port="$1" if ! [[ "$port" =~ ^[0-9]+$ ]]; then echo "Error: port must be a number" >&2 exit 1 fi if lsof -i TCP:"$port" -sTCP:LISTEN -P -n >/dev/null 2>&1; then process=$(lsof -i TCP:"$port" -sTCP:LISTEN -P -n -F pcn 2>/dev/null | awk -F= ' /^p/ { pid=substr($0,2) } /^c/ { cmd=substr($0,2) } /^n/ { printf "%s (PID %s)", cmd, pid; exit } ') echo "Port $port is used by: $process" exit 1 else echo "Port $port is free" fi