使用分隔符解析数字 - 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 为什么你要-在端口号中寻找破折号?

相关内容