bash:regex:ip_validity
Table of Contents
BASH - Regex - IP validity
#!/usr/bin/env bash ip=1.2.3.4 if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "success" else echo "fail" fi
POSIX only
#!/bin/sh ip=1.2.3.4 if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then echo "success" else echo "fail" fi
Verify that each quad is less than 256
#!/bin/sh ip=${1:-1.2.3.4} if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then for i in 1 2 3 4; do if [ $(echo "$ip" | cut -d. -f$i) -gt 255 ]; then echo "fail ($ip)" exit 1 fi done echo "success ($ip)" exit 0 else echo "fail ($ip)" exit 1 fi
NOTE: expr assumes that your regex is anchored to the left-hand-side of the string, so the initial ^ is unnecessary..
Verify that each quad is less than 256 - with fewer pipes
#!/bin/sh ip=${1:-1.2.3.4} if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then IFS=. set $ip for quad in 1 2 3 4; do if eval [ \$$quad -gt 255 ]; then echo "fail ($ip)" exit 1 fi done echo "success ($ip)" exit 0 else echo "fail ($ip)" exit 1 fi
bash/regex/ip_validity.txt · Last modified: 2021/01/09 11:47 by peter