출력이 IP 주소와 같을 경우 쉘 스크립트

출력이 IP 주소와 같을 경우 쉘 스크립트

$IP출력이 임의의 IP 주소와 같으면 1을 인쇄해야 하고, 그렇지 않으면 0을 인쇄해야 합니다 .

#!/bin/sh

IP=$(/usr/local/bin/dig ns.ripe.net. a +short)

if [ $IP = "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" ]; then
   echo 1
elif [ $IP != $ANY_IP ]; then
   echo 0
fi

"/usr/local/bin/dig ns.ripe.net.a +short" 출력이 IP 주소를 반환하는지 확인해야 하는 스크립트를 작성해야 합니다. 1을 반환해야 하고, 그렇지 않으면 0을 반환해야 합니다. 이 스크립트의 목적은 dnssec을 확인하는 것입니다. 비교를 위해 임의의 IP 주소를 표현하는 방법은 무엇입니까?

답변1

정확도를 높이기 위해:

  1. POSIX 쉘

    case $IP in 
        *.*.*.*) echo "$IP contains at least 3 dots" ;;
        *) echo "$IP does not contain 3 dots" ;;
    esac
    
  2. 세게 때리다

    shopt -s extglob
    if [[ $IP == +([0-9]).+([0-9]).+([0-9]).+([0-9]) ]]; then
        echo "$IP contains digits separated by dots
    fi
    
  3. 세게 때리다

    looks_like_IP_address() {
       [[ $1 =~ ^([0-9]+)"."([0-9]+)"."([0-9]+)"."([0-9]+)$ ]] &&
       (( 0 <= ${BASH_REMATCH[1]} && ${BASH_REMATCH[1]} <= 255 )) &&
       (( 0 <= ${BASH_REMATCH[2]} && ${BASH_REMATCH[2]} <= 255 )) &&
       (( 0 <= ${BASH_REMATCH[3]} && ${BASH_REMATCH[3]} <= 255 )) &&
       (( 0 <= ${BASH_REMATCH[4]} && ${BASH_REMATCH[4]} <= 255 ))
    }
    if looks_like_IP_address "$IP"; then
        echo "$IP looks like an IP address"
    fi
    

관련 정보