当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 想把输入值限定在0-23之间,请问用grep如何检查合法性???
帖子发表于 : 2008-04-22 16:15 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
想把输入值限定在0-23之间,请问用grep如何检查合法性???


_________________
修己,安人


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-04-22 16:25 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
用 expr 好一点:
代码:
$ read i
43
Exit status: 0
yaoms@yaoms-laptop:~
$ echo $i
43
Exit status: 0
yaoms@yaoms-laptop:~
$ expr $i \> 0 && expr $i \< 23
1
0
Exit status: 1
yaoms@yaoms-laptop:~
$


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-04-22 17:10 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
既然一定要用grep....
代码:
read i
grep -E '^(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23)$' <<<"$i"


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-04-22 17:27 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
...BT的球猫..


_________________
关注我的blog: ε==3


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-22 17:28 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
BigSnake.NET 写道:
既然一定要用grep....
代码:
read i
grep -E '^(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23)$' <<<"$i"
。。。。BT


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-04-22 20:07 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
yaoms 写道:
BigSnake.NET 写道:
既然一定要用grep....
代码:
read i
grep -E '^(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23)$' <<<"$i"
。。。。BT


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-04-22 22:01 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
我的意思是从键盘上输入一个值,要是输入值是0-23,则返回该值,要不是,而是随便输入的值的话,如10a,ab,-5等,则判断出错。所以想用grep来验证所得到的输入值。请问有比较简洁的语句吗???


_________________
修己,安人


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-04-22 22:06 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
或者要是有其它比较好的简洁的判断方法,也可以,谢谢


_________________
修己,安人


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-04-23 15:10 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
vincent_zh 写道:
或者要是有其它比较好的简洁的判断方法,也可以,谢谢
我的的代麻不可以吗?


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-04-23 16:38 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
不可以啊,看下这个你就知了

vincent@NSHM:~/Desktop$ read i
2a
vincent@NSHM:~/Desktop$ echo $i
2a
vincent@NSHM:~/Desktop$ expr $i \> 0
1
vincent@NSHM:~/Desktop$ expr $i \< 23
0

这就不对了啊,输入的时候可以输入任何字符的,没有限定的


_________________
修己,安人


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-04-23 16:50 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
代码:
#!/bin/bash

EXIT_CONDITION=exit
until [ "$var" = "$EXIT_CONDITION" ]
do
        read -p "Please input: " var
        echo "String: $var"
        nbr=`echo $var | pcregrep -o '\d+'`
        if [[ -n "$nbr" && "$nbr" -ge 0 && "$nbr" -le 23 ]]; then
                echo "Valid"
        else
                echo "Invalid"
        fi
done



我在这里使用了 pcregrep。Ubuntu 中的 grep 默认是不支持 -P 参数的,也就是不能使用 perl 风格的 regex。如果使用 GNU grep 的话,将其中的
代码:
pcregrep -o '\d+'

改成
代码:
grep -o '[0-9]+'


_________________


最后由 patrickhe 编辑于 2008-04-23 16:59,总共编辑了 1 次

页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-04-23 16:54 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
vincent_zh 写道:
不可以啊,看下这个你就知了

vincent@NSHM:~/Desktop$ read i
2a
vincent@NSHM:~/Desktop$ echo $i
2a
vincent@NSHM:~/Desktop$ expr $i \> 0
1
vincent@NSHM:~/Desktop$ expr $i \< 23
0

这就不对了啊,输入的时候可以输入任何字符的,没有限定的
。。。。原来你不会变通。


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-04-23 17:17 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
请大侠指点,谢谢


_________________
修己,安人


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-04-23 17:21 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
我是小虾米,不好意思


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2008-04-23 17:24 
头像

注册: 2008-04-05 10:56
帖子: 129
地址: 学校
送出感谢: 0 次
接收感谢: 0 次
我倒是想到先检查输入的是不是数字,再判断其范围是不是在0-23之间,但我想知道有没有简洁的方法呢???
期待高手


_________________
修己,安人


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译