织梦CMS - 轻松建站从此开始!

罗索

在shell中如何判断字符串是否为有效的IP地址

jackyhwei 发布于 2019-12-23 19:54 点击:次 
近来需要写个小shell判断用户输入的字符串是否为有效的ip地址,简单排除了以下几种情况: 1. 以点号为分隔的域不等于4或6; 2. 出现字符; 3. 某域以0开头; 4. 各域数值长度大于3; 5. 各域数
TAG: 检查IP地址  

近来需要写个小shell判断用户输入的字符串是否为有效的ip地址,简单排除了以下几种情况:
1. 以点号为分隔的域不等于4或6;
2. 出现字符;
3. 某域以0开头;
4. 各域数值长度大于3;
5. 各域数值大于255
6. 第一个和最后一个域为0

IPADDR=192.168.1.1 (有效)
IPADDR=192.168.0.254(有效)
IPADDR=10.0.0.0(无效)
IPADDR=0.1.1.1(无效)
IPADDR=192.168.001.001 (无效)
IPADDR=1aa.2bb.3cc.4dd (无效)
IPADDR=aaa.bbb.ccc.ddd (无效)
IPADDR=192.168.1.1.2 (无效)
IPADDR=292.168.1.1(无效)
IPADDR=192.168.1.1111(无效)

脚本如下:

  1. #!/bin/sh 
  2. IPADDR=$1 
  3. _ckIPaddr () { 
  4.         ckStep1=`echo $1 | awk -F"." '{print NF}'` 
  5.         if [ $ckStep1 -eq 4 ] || [ $ckStep1 -eq 6 ] 
  6.         then 
  7.                 ckStep2=`echo $1 | awk -F"." '{if ($1!=0 && $NF!=0) split ($0,IPNUM,".")} END \ 
  8.         { for (k in IPNUM) if (IPNUM[k]==0) print IPNUM[k]; else if (IPNUM[k]!=0 && IPNUM[k]!~/[a-z|A-Z]/ && length(IPNUM[k])<=3 && 
  9. IPNUM[k]<255 && IPNUM[k]!~/^0/) print IPNUM[k]}'| wc -l` 
  10.                 if [ $ckStep2 -eq $ckStep1 ] 
  11.                 then 
  12.                         echo 0 
  13.                 else 
  14.                         echo 1 
  15.                 fi 
  16.         else 
  17.                 echo 1 
  18.         fi 
  19.  
  20. CK_IPADDR=`_ckIPaddr $IPADDR` 
  21. if [ $CK_IPADDR -eq 1 ] 
  22. then 
  23.      echo "The string $IPADDR is not a correct ipaddr!!!" 
  24. fi

另外补充正则表达式的方法:

  1. #!/bin/sh 
  2. IPADDR=$1 
  3. regex="\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b" 
  4. ckStep2=`echo $1 | egrep $regex | wc -l` 
  5. if [ $ckStep2 -eq 0 ] 
  6. then 
  7.        echo "The string $IPADDR is not a correct ipaddr!!!" 
  8. else 
  9.        echo $1 
  10. fi 

 

(_echoisecho_)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201912/17604.html]
本文出处:新浪博客 作者:_echoisecho_ 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
相关文章
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容