Analisar números com delimitador - BASH

0

Gostaria de analisar portas, por exemplo, 45:68 . Eu defini testes var.

echo "ports"
read in

Eu dividi as portas para array:

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

As portas devem ter menos de 65535, conter apenas números e devem ser preenchidas. Então eu configurei o loop while baseado nas condições mencionadas.

    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

Depois de executar meu script, fiquei preso em loop.

Existe alguma maneira melhor de analisar as portas com sucesso?

    
por Michal N. 07.03.2016 / 09:37

1 resposta

0

Use for loop como sugerido por @roamia e valide cada elemento com 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

P. Por que você está procurando o traço - no número da porta?

    
por 07.03.2016 / 12:47