#!/bin/bash start_port=$1 needed=$2 if [[ -z "$start_port" || -z "$needed" || "$needed" -le 0 ]]; then echo "Usage: $0 " exit 1 fi free_ports=() found_base=-1 check_port() { local p=$1 timeout 1 bash -c "exec 6<>/dev/tcp/127.0.0.1/$p" 2>/dev/null && return 1 || return 0 } for ((port = start_port; port <= start_port + 2000; port++)); do if check_port "$port"; then # порт свободен free_ports+=("$port") # если это первый порт в потенциальном блоке — запомним его if [ "${#free_ports[@]}" -eq 1 ]; then found_base=$port fi # если набрали нужное количество подряд свободных if [ "${#free_ports[@]}" -eq "$needed" ]; then base_port=${free_ports[0]} # Считаем, какой порт должен быть в диапазоне 18000–18999 offset=$((base_port - 19000)) # например, 19015 → offset=15 mirror_port=$((18000 + offset)) conflict=false # Проверяем весь блок в зеркальном диапазоне 18000+ for ((i=0; i