Chinaunix

标题: 请教一个shell脚本,能判断后跟的是不是一个正确的IP地址。 [打印本页]

作者: rilee    时间: 2010-06-08 07:23
标题: 请教一个shell脚本,能判断后跟的是不是一个正确的IP地址。
本帖最后由 rilee 于 2010-06-12 07:00 编辑

#!/bin/bash
if grep -Eq '([0-9]{1,3}\.){3}[0-9]{1,3}' <<< $1
then
        echo YES
else
        echo NO
fi


这个判断的并不准确,楼下给正解!!!!

补充:
#!/bin/bash


read -p "type ip address:" ip
#if grep -Eq '([0-9]{1,3}\.){3}[0-9]{1,3}' <<< $ip
if grep -Eq '([1-2][0-9]{0,2}\.)([0-2][0-9]{0.2}\.){2}([0-2][0-9]{0,2})' <<< $ip

then
        echo $ip|awk -F. '{if (($1<=255 && $1>0) && ($2<=255 && $2>=0) && ($3<=255 && $3>=0) && ($4<=255 && $4>=0) && (NF=4)) print "good"}'

else

        echo NO

fi

这个也不行,大家帮看看,grep哪里写错了???
作者: 99超人    时间: 2010-06-08 07:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: lkk2003rty    时间: 2010-06-08 09:33
  1. [oracle@s12071 ~]$ echo "127.0.0.1" | awk --posix '/((([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))/{print "OK:"$0}'
  2. OK:127.0.0.1
  3. [oracle@s12071 ~]$
复制代码
写个正则的。。。。
作者: jidi_78    时间: 2010-06-08 10:02
回复 1# rilee
  1.      grep -P "((2[0-4]\d|25[0-5]|1\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)" file
复制代码

作者: wild_li    时间: 2010-06-08 11:19
以前有个帖子这么写的
[oracle@imeg02 oracle]$ awk -F'.' '{if ( ($1>256 || $1256 || $2 < 0) || ($3 >  ...
99超人 发表于 2010-06-08 07:56



    这个应该是要把$?<0改成$?<=0吧?
作者: expert1    时间: 2010-06-08 11:24
just 搜一下吧。本版有个帖子讨论的很详细
作者: 99超人    时间: 2010-06-08 11:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: wild_li    时间: 2010-06-08 11:27
回复  wild_li


    那这样的话 1.0.1.2就会认为不是正确的ip了
99超人 发表于 2010-06-08 11:24



    Sorry,,那应该是$1不能等于0
作者: 99超人    时间: 2010-06-08 11:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: beginner-bj    时间: 2010-06-08 11:39
那个老帖用的方法太麻烦了。

换个思路,用我的方法吧。

11:34:52 root@ST-TEST:[/]#ping -c1 -w1 1.100.1000.1
0821-062 ping: host name 1.100.1000.1 NOT FOUND
11:34:54 root@ST-TEST:[/]#ping -c1 -w1 1.100.1000.1 2>&1 | grep -q "NOT FOUND" && echo wrong IP adress || echo good IP adress
wrong IP adress
11:35:02 root@ST-TEST:[/]#

注:只提供思路,还有些细节要考虑。
作者: wild_li    时间: 2010-06-08 11:44
那个老帖用的方法太麻烦了。

换个思路,用我的方法吧。

11:34:52 root@ST-TEST:[/]#ping -c1 -w1 1.1 ...
beginner-bj 发表于 2010-06-08 11:39



这个方法用结果来判断,也是一种思路,但有个问题需要考虑的是,ping x.x.x的时候就会有问题了,三位的在系统上是会自动补位上去.
作者: ywlscpl    时间: 2010-06-08 12:26
回复 3# lkk2003rty


    [root@Mylinux tmp]# echo "0.0.0.1" | awk --posix '/((([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]{1,2})|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))/{print "OK:"$0}'   
OK:0.0.0.1
作者: beginner-bj    时间: 2010-06-08 12:33
回复 11# wild_li


    这就是我说的要注意的细节之处。
作者: lkk2003rty    时间: 2010-06-08 13:02
回复 12# ywlscpl


    厄 。。。没看懂想表达什么。。。IP的范围就是从0.0.0.0-255.255.255.255啊。。。。实际用的就要看情况了 是内网还是公网这个范围是不一样的。。。但是lz只说匹配IP。。。
作者: ywlscpl    时间: 2010-06-08 13:31
回复 14# lkk2003rty


     我想表达的是0.0.0.1不是一个正确的IP地址
作者: kwokcn    时间: 2010-06-08 14:27

  1. IP=2.2.2.2; ipcalc -m $IP >/dev/null 2>&1 && echo YES || echo NO
复制代码

作者: yazi0127    时间: 2010-06-08 15:41
丛书上看到的,IP地址的正则:
  1. ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}
复制代码

作者: rilee    时间: 2010-06-08 20:33
回复 12# ywlscpl


    这个不行,888.23.36.1,你试试,要判断范围的。
作者: rilee    时间: 2010-06-08 23:51
回复 15# ywlscpl


    恩,对啊,ip从1.0.0.0.1开始的。
作者: rilee    时间: 2010-06-09 07:15
回复 2# 99超人

191.68.9.0000    这样就不灵了
作者: 99超人    时间: 2010-06-09 07:49
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2