BASH Script IPv6 address validation

Here’s a simple function to validate IPv6 address space within a bash script

# Function to validate an IPv6 address
# Returns 0 if valid, 1 if invalid
validate_ipv6() {
    local ip="$1"
    # Check if empty
    if [[ -z "$ip" ]]; then
        return 1
    fi
    # Regex for IPv6: 8 groups of 0-4 hex digits, or compressed with ::
    # Handles full format (e.g., 2001:0db8:0000:0000:0000:ff00:0042:8329)
    # and compressed format (e.g., 2001:db8::ff00:42:8329)
    local ipv6_regex='^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(:[0-9a-fA-F]{1,4}){1,6}|::([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}|::)$'
    if [[ $ip =~ $ipv6_regex ]]; then
        return 0
    else
        return 1
    fi
}

Leave a Reply

Your email address will not be published. Required fields are marked *