GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Überprüfen Sie die IP-Gültigkeit

Verwenden Sie ipcalc (getestet mit dem Versionspaket in RPM initscripts-9.49.49-1)

$ ipcalc -cs 10.10.10.257 && echo vaild_ip || echo invalid_ip
invalid_ip

Diese einzelne Regex sollte nur die Adressen zwischen 0.0.0.0 und 255.255.255.255 validieren:

#!/bin/bash

ip="1.2.3.4"

if [[ "$ip" =~ ^(([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.){3}([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$ ]]; then
  echo "success"
else
  echo "fail"
fi

Wenn Sie Bash verwenden, können Sie einen einfachen Regex-Abgleich für das Muster durchführen, ohne die Quads zu validieren:

#!/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

Wenn Sie mit einer POSIX-Shell nicht weiterkommen, können Sie expr verwenden um im Grunde dasselbe zu tun, indem Sie BRE anstelle von ERE verwenden:

#!/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

Beachten Sie, dass expr geht davon aus, dass Ihre Regex auf der linken Seite der Zeichenfolge verankert ist, also der anfängliche ^ ist unnötig.

Wenn es wichtig ist zu überprüfen, ob jedes Quad kleiner als 256 ist, benötigen Sie offensichtlich mehr Code:

#!/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

Oder vielleicht sogar mit weniger 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

Oder wenn Ihre Shell Bash ist, könnten Sie einen umständlichen regulären Ausdruck für die Quad-Validierung verwenden, wenn Sie Arithmetik nicht mögen:

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

re='^(0*(1?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))\.){3}'
 re+='0*(1?[0-9]{1,2}|2([‌​0-4][0-9]|5[0-5]))$'

if [[ $ip =~ $re ]]; then
  echo "success"
else
  echo "fail"
fi

Das könnte man auch in BRE ausdrücken, aber das ist mehr Tipparbeit als ich in den Fingern habe.

Und schließlich, wenn Sie die Idee mögen, diese Funktionalität ... in eine Funktion zu packen:

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

ipvalid() {
  # 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 ipvalid "$ip"; then
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

Es gibt viele Möglichkeiten, wie Sie dies tun können. Ich habe dir nur ein paar gezeigt.


Das Skript Validating an IP Address in a Bash Script von Mitch Frazier tut, was Sie tun möchten:

function valid_ip()
{
local  ip=$1
local  stat=1

if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    OIFS=$IFS
    IFS='.'
    ip=($ip)
    IFS=$OIFS
    [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
        && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
    stat=$?
fi
return $stat
}

Linux
  1. So suchen Sie in der Konsole nach großen Dateien

  2. Der Zweck des Schlüsselworts „do“ in Bash-For-Schleifen?

  3. Auf Prozess prüfen, wenn dieser läuft?

  4. Liste der Server nach zugewiesenem Arbeitsspeicher/CPU abfragen?

  5. Überprüfen Sie die Linux-Konfigurationsdateien auf Syntaxfehler

So prüfen (scannen) Sie offene Ports in Linux

So suchen Sie unter Linux nach Listening Ports (Ports in use)

Linux echo Command Tutorial für Anfänger (5 Beispiele)

Existiert ein Liner zum Überprüfen der Datei?

Datenbank auf Beschädigung prüfen

Überprüfen Sie, ob eine Variable in einer Liste in Bash vorhanden ist