天涼好個秋.

Shell判断ip地址类型

1956 阅 0 评 问题&解决方案

问题

最近的给 ss 插件添加一个新特性,需要用shell判断ip地址类型,想到了大概思路是用正则表达式,但是正则表达式你也懂的,只好 Google 了,在 Stack Overflow上找到了正解。记录之

Code

#!/bin/sh

if [ "$1" != "${1#*[0-9].[0-9]}" ]; then
  echo IPv4
elif [ "$1" != "${1#*:[0-9a-fA-F]}" ]; then
  echo IPv6
else
  echo "Unrecognized IP format '$1'"
fi

限制

root@Hiwifi:~# /tmp/test.sh 256.256.256.25aa
IPv4
root@Hiwifi:~# /tmp/test.sh 256.256.256.aaaa
IPv4
root@Hiwifi:~# /tmp/test.sh 1:1
IPv6

在我的代码里可以保证$1为 IPv4 、IPv6 、域名 其中的一种,所以这个方法适合我,但是不一定适合你的代码(比如需要精确校验ip是否合法的场合)。

Reference

how can i check IP version ( 4 or 6) in shell script

EOF