예를 들어, 포트를 확인하고 싶습니다 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 포트 번호에서 대시를 찾는 이유는 무엇입니까 ?