免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5831 | 回复: 11
打印 上一主题 下一主题

求:判断输入ip是否合法的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-06 18:45 |只看该作者 |倒序浏览
现在刚学写脚本,就遇到问题了,急需一个函数,各位帮忙了

该函数基本功能:读入一个ip,判断该ip是否合法,如果不合法,继续读入一个ip,如果该ip合法,退出该函数。

写过这种函数的老兄一定帮忙了,确实着急。谢谢各位了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-01-06 19:00 |只看该作者
try:

  1. ip ()
  2. {
  3.     ifs=$IFS;
  4.     IFS=.;
  5.     set $1;
  6.     (( "$1>0&&$1<255" )) && (( "$2>=0&&$2<255" )) && (( "$3>=0&&$3<255" )) && (( "$4>=0&&$4<255" )) && echo ok || echo error;
  7.     IFS=$ifs
  8. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2006-01-06 19:19 |只看该作者
原帖由 寂寞烈火 于 2006-1-6 19:00 发表
try:
[code]
ip ()
{
    ifs=$IFS;
    IFS=.;
    set $1;
    (( "$1>0&&$1<255" )) && (( "$2>=0&&$2<255" )) && (( "$3>= ...


火哥厉害!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2006-01-06 19:22 |只看该作者
原帖由 dbcat 于 2006-1-6 19:19 发表


火哥厉害!

惭愧惭愧,应付一下

论坛徽章:
0
5 [报告]
发表于 2006-01-06 19:25 |只看该作者
谢谢烈火老兄。
我试了一下,这个函数没有对正确和错误的处理。我随便输入一个字符a,该函数不能判断是错误。
我自己写的一个函数是这样的:
chkip(){
    read ip
    echo $ip |awk -F. '{ if (($1 >256 || $1 <0) || ($2 >256 || $2 < 0) || ($3 >
256 || $3 < 0) || ($4 > 256 || $4 < 0 ) || (NF!=4)) {print $0 ,"is incorrect"} }'
}
上面这个函数只是对出错的ip进行了判断,我想让函数的功能为:判断出错误以后继续读入,如果输入正确则退出函数,应该怎样写呢?
真是着急啊

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-01-06 19:27 |只看该作者
原帖由 hdzbf 于 2006-1-6 19:25 发表
谢谢烈火老兄。
我试了一下,这个函数没有对正确和错误的处理。我随便输入一个字符a,该函数不能判断是错误。
我自己写的一个函数是这样的:
chkip(){
    read ip
    echo $ip |awk -F. '{ if (($1 >25 ...

用while循环

论坛徽章:
0
7 [报告]
发表于 2006-01-06 19:28 |只看该作者
原帖由 hdzbf 于 2006-1-6 19:25 发表
谢谢烈火老兄。
我试了一下,这个函数没有对正确和错误的处理。我随便输入一个字符a,该函数不能判断是错误。
我自己写的一个函数是这样的:
chkip(){
    read ip
    echo $ip |awk -F. '{ if (($1 >25 ...


  1. awk -F'.' '{if($1<=255&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=0){exit }else {printf "wrong\n"}}'
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-01-06 19:43 |只看该作者
原帖由 dbcat 于 2006-1-6 19:28 发表



[code]awk -F'.' '{if($1<=255&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=0){exit }else {printf "wr ...


谢谢烈火老兄和dbcat的回复。
我用while写了一个死循环
while [ true ]
do
    echo "please input IP:"
    read ip
    echo $ip | awk -F'.' '{if($1<=255&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=0){break }else {printf "wrong\n"}}'

done
当输入一个正确ip,为什么还没跳出循环呢?我是用的sh

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-01-06 19:50 |只看该作者
原帖由 hdzbf 于 2006-1-6 19:43 发表


谢谢烈火老兄和dbcat的回复。
我用while写了一个死循环
while [ true ]
do
    echo "please input IP:"
    read ip
    echo $ip | awk -F'.' '{if($1<=255&&$1>0&&am ...

你不用:
continue
break
当然死

论坛徽章:
0
10 [报告]
发表于 2006-01-06 20:28 |只看该作者
这里用不到continue吧?用exit怎么也不行呢?
read_ip(){
while [ true ]
do
  echo "please input IP:"
  read ip
  echo $ip | awk -F'.' '{if($1<=255&&$1>0&&$2<=255&&$2>=0&&$3<=255&&$3>=0&&$4<=255&&$4>=0&&NF=4){ printf "hello\n"; exit }else {printf "wrong\n"}}'

done
}
我输入一个正确的ip只打印出一个hello,还是退出不了这个函数,为什么会这样呢?晕啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP