[bash]入力した文字列がIPv4アドレスかを判定する


atsuiみなさんこんにちは。入力したIPアドレスが正しい形式かどうか、判定したいことがあるでしょう。そんな時に役立つシェルスクリプトがこれです。

まずはソースを見てみましょう。

#!/bin/bash

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
}

# If run directly, execute some tests.
ips=$*
for ip in $ips
do
  if valid_ip $ip;
  then
    stat='good'
    printf "%-20s: %sn" "$ip" "$stat"
    exit 0
  else
    stat='bad'
    printf "%-20s: %sn" "$ip" "$stat"
    exit 1
  fi
done

引数に与えた文字列が、1~3桁で255までかどうかを判別しています。

[amazonjs asin="4774146439" locale="JP" title="[改訂新版] シェルスクリプト基本リファレンス  --#!/bin/shで、ここまでできる (WEB+DB PRESS plus)"]