分页: 1 / 2

想把输入值限定在0-23之间,请问用grep如何检查合法性???

发表于 : 2008-04-22 16:15
vincent_zh
想把输入值限定在0-23之间,请问用grep如何检查合法性???

发表于 : 2008-04-22 16:25
yaoms
用 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:~
$ 

发表于 : 2008-04-22 17:10
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"

发表于 : 2008-04-22 17:27
bones7456
...BT的球猫..

发表于 : 2008-04-22 17:28
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

发表于 : 2008-04-22 20:07
HuntXu
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

发表于 : 2008-04-22 22:01
vincent_zh
我的意思是从键盘上输入一个值,要是输入值是0-23,则返回该值,要不是,而是随便输入的值的话,如10a,ab,-5等,则判断出错。所以想用grep来验证所得到的输入值。请问有比较简洁的语句吗???

发表于 : 2008-04-22 22:06
vincent_zh
或者要是有其它比较好的简洁的判断方法,也可以,谢谢

发表于 : 2008-04-23 15:10
yaoms
vincent_zh 写了:或者要是有其它比较好的简洁的判断方法,也可以,谢谢
我的的代麻不可以吗?

发表于 : 2008-04-23 16:38
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

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

发表于 : 2008-04-23 16:50
patrickhe

代码: 全选

#!/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]+'

发表于 : 2008-04-23 16:54
yaoms
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

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

发表于 : 2008-04-23 17:17
vincent_zh
请大侠指点,谢谢

发表于 : 2008-04-23 17:21
yaoms
我是小虾米,不好意思

发表于 : 2008-04-23 17:24
vincent_zh
我倒是想到先检查输入的是不是数字,再判断其范围是不是在0-23之间,但我想知道有没有简洁的方法呢???
期待高手