#!/bin/bash # =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ # IP Address parsing revisited # =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ =~ # # An IP address looks like this: # 192.168.0.5 # Four groups of 1-3 numbers in the range 0..255 separated by dots. # re='^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$' # # The address is expected as the only argument # if [[ $# -ne 1 ]]; then echo "Usage: $0 IP_address" exit 1 fi # # Validate against the regex # if [[ $1 =~ $re ]]; then # # Look at the components and check they are all in range # errs=0 problems= for i in {1..4}; do d="${BASH_REMATCH[$i]}" if [[ $d -lt 0 || $d -gt 255 ]]; then ((errs++)) problems+="$d " fi done # # Report any problems found # if [[ $errs -gt 0 ]]; then problems="${problems:0:-1}" echo "$1 is not a valid IP address; contains ${problems// /, }" exit 1 fi echo "$1 is a valid IP address" else echo "$1 is not a valid IP address" fi