Bashを使用して特定の範囲で利用可能な最初のポートを選択する最も短い方法は何ですか?

Bashを使用して特定の範囲で利用可能な最初のポートを選択する最も短い方法は何ですか?

目的:範囲で使用可能な最初のポートを選択します。たとえば、ポート600が利用できない場合は、ポート601が利用可能であることを確認します。

試み:次のスクリプトは期待どおりに機能しますが、私の考えにはあまりにも包括的です。

PORT=601; until [ $PORT -gt 610 ]; do
    if ! [[ `ss -nat | grep "*:$PORT\s"` ]]; then
        echo $PORT;
        exit 0;
    elif [ $PORT -eq 610 ]; then
        echo "no ports available";
        exit 1;
    fi;
    let PORT+=1;
done

期待される答え:最も簡潔なスクリプトを提供する回答が投票され承認されます。スクリプトはまだ目標を満たすことができるはずです。

ベストアンサー1

これはどうですか。一度だけ電話してss恩恵を受けてください。

USED=$(ss -nat '( sport >= :601 and sport <= :610 )'|awk 'NR>1{print substr($4,3)}')
for PORT in {601..610}; do
 echo $USED | grep $PORT >/dev/null
 if [ $? != 0 ];then
  echo $PORT
  exit 0
 fi
done
echo no ports available
exit 1

少し短い試み:

USED=$(ss -nat '( sport >= :601 and sport <= :610 )'|awk 'NR>1{print substr($4,3)}')
for PORT in {601..610}; do
    [[ ! "$USED" =~ "$PORT" ]] && echo $PORT && exit 0
done
echo no ports available
exit 1

おすすめ記事