区切り文字を使用した数値の解析 - BASH

区切り文字を使用した数値の解析 - BASH

たとえば、ポートを確認したいと思います45:68。テスト変数を定義しました。

echo "ports"
read in

ポートを配列に分割しました。

IFS=":" read -ra port <<< "$in"

ポートは65535未満で、数字のみを含め、入力する必要があります。だから、言及された条件に従ってwhileループを設定しました。

    while [ -z "${port[@]}" ] || [[ "${port[0]}" =~ ^-?[0-9]+$ ]] || [[ "${port[1]}" =~ ^-?[0-9]+$ ]] ||[ "${port[@]}" -gt 65535 ]
         do
            port=$(whiptail --title "No!" --inputbox --nocancel "Error MSG." 12 50 3>&1 1>&2 2>&3)
         done

スクリプトを実行した後、ループに閉じ込められます。

ポートを正常に解決するより良い方法はありますか?

答え1

@roamiaが提案したようにforループを使用し、以下を使用して各要素を検証します。if

for current_port in "${port[@]}"; do
  if ! [[ -n $current_port && $current_port =~ ^-?[0-9]+$ && $current_port -le 65535 ]]; then
    port=$(whiptail --title "No!" --inputbox --nocancel "Error MSG." 12 50 3>&1 1>&2 2>&3)
  fi
done

-PSポート番号でダッシュを見つけるのはなぜですか?

関連情報