0

ダッシュ スクリプト内で IP アドレスを検証しようとしています。linuxjournalのように、bash で同じことを達成する多くの方法を見つけました。

基本的に、これを使用した比較は次のとおりです。

if [[ $ip =~ '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ]]; then
  do something
fi

ダッシュで同じことを得る方法はありますか?

更新:これは、必要なことを実行する最終的なスクリプトです。

#In case RANGE is a network range (cidr notation) it's splitted to every ip from 
# that range, otherwise we just keep the ip
if echo $RANGE | grep -E -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$'; then
    IPS=`prips $RANGE -e ...0,255`
    if [ "$?" != "0" ] ; then
        echo "ERROR: Not a valid network range!"
        exit 1
    fi
elif echo $RANGE | grep -E -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'; then
    IPS="$RANGE"
else
    echo "$RANGE no is not a valid IP address or network range"
    exit 1
fi
4

3 に答える 3

1

case正規表現よりも冗長になりますが、ステートメントを作成できます。一方、外部プロセスの生成を回避すると、読み取りと起動の維持が容易になる場合があります。

if case $ip in
    # Invalid if it contains any character other than number or dot
    # Invalid if it contains more than three dots
    # Invalid if it contains two adjacent dots
    # Invalid if it begins with a non-number
    # Invalid if it ends with a non-number
    *[!.0-9]* | *.*.*.*.* | *..* | [!0-9]* | *[!0-9] ) false ;;
    # Invalid if it contains a number bigger than 255:
    #  256-259 or 260-299 or 300-999 or four adjacent digits
    *25[6-9]* | *2[6-9][0-9]* | *[3-9][0-9][0-9]* | *[0-9][0-9][0-9][0-9]* ) false;;
    # Verify that it contains three dots
    *.*.*.* ) true ;;
    # Failing that, invalid after all (too few dots)
    *) false ;;
esac; then
    echo "$ip" is valid
fi

caseステートメントの条件としてステートメント (true または false のいずれかを返す)が奇妙に使用されていることに注意してifください。

これは、各オクテットが 256 未満である必要があるという点で、正規表現よりもわずかに厳密です。

于 2012-02-14T12:21:49.727 に答える
0

検証文字列に満足していると仮定します。

$ s='[0-9]\{1,3\}'
$ エコー $ip | grep > /dev/null "^$s\.$s\.$s\.$s$" &&
  echo $ip は有効です

これは、876.3.4.5 のような無効な IP アドレスを受け入れることに注意してください。

IP を検証するために、正規表現を使用するのは本当に便利ではありません。比較的簡単なことは次のとおりです。

IFS=. abcd << EOF を読む
$ip
EOF

if ( for i in abcd; do
        評価テスト \$$i -gt 0 && 評価テスト \$$i -le 255 || 1番出口
    完了 2> /dev/null )
それから
    echo $ip は有効です
フィ
于 2012-02-14T11:20:12.167 に答える