La fonction ci-dessous permet de tester une adresse IPv4 pour vérifier qu'elle est bien formée :

is_ipv4() {
  local -r regex='^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'

  [[ $1 =~ $regex ]]
  return $?
}

Et voici un exemple d'utilisation :

is_ipv4 $ip

if [ "$?" -ne 0 ]
then
  echo "[x] $ip is not an IPv4"
  exit 1
fi