구분 기호를 사용하여 숫자 구문 분석 - 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 포트 번호에서 대시를 찾는 이유는 무엇입니까 ?

관련 정보