#!/usr/bin/env bash ip=${1:-1.2.3.4} ip_valid() { # Set up local variables local ip=${1:-1.2.3.4} local IFS=.; local -a a=($ip) # Start with a regex format test [[ $ip =~ ^[0-9]+(\.[0-9]+){3}$ ]] || return 1 # Test values of quads local quad for quad in {0..3}; do [[ "${a[$quad]}" -gt 255 ]] && return 1 done return 0 } if ip_valid "$ip"; then echo "success ($ip)" exit 0 else echo "fail ($ip)" exit 1 fi
NOTE: Alternative regex is to change:
[[ $ip =~ ^[0-9]+(\.[0-9]+){3}$ ]] || return 1
to
[[ $ip =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]] || return 1
or
^[1-9][0-9]{,2}(\.[1-9][0-9]{,2}){3}$
to avoid leading zeroes in a quad.