分页: 1 / 2
判断输入的是整数还是字符串
发表于 : 2011-07-12 19:40
由 chengmoYS
我在网上搜索到expr可以用来判断输入的是否为整数
我写了个脚本如下
#!/bin/sh
read -p "Please enter an integer: " -t 5 i
expr $i + 1 > /dev/null 2>&1
if [ $? -eq 0 ]
then
echo "You have enter an integer"
else
echo "You have not enter an integer"
fi
当输入的整数为非-1时,都显示为you have not enter an integer
但是输入-1时,显示为you have not enter an integer
[user@localhost ~]$ sh test.sh
Please enter an integer: -1
The value of i is not an integer
[user@localhost ~]$
请问为啥
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-12 21:34
由 eexpress
读入字符串,用转换函数处理,或者用+1再-1的方法,比较原字符串。
shell只有那么多能力。
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-12 22:06
由 fnan
数学表达式结果为零时为逻辑值false,非零是true,所以expr $i + 1 而i=-1时$?返回1,即通常意义的不成功。
试试:
#!/bin/sh
read -p "Please enter an integer: " i
expr $i + 1 > /dev/null 2>&1
if [ $? -ne 2 ]
then
echo "You have enter an integer"
else
echo "You have not enter an integer"
fi
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 0:08
由 ChenFengyuan
代码: 全选
$ read i && echo $i | grep -qP '^\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
3
a number
$ read i && echo $i | grep -qP '^\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
aoeu
not a number
代码就是
代码: 全选
read i && echo $i | grep -qP '^\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
to ee,可以用grep嘛,shell就是么借助别的bin啊

Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 5:38
由 fnan
kose5@kose5-Aspire-4552:~$ read i && echo $i | grep -qP '^\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
-1
not a number
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 5:41
由 fnan
试试:
read i;((10#$i^2+1)) 2>/dev/null && echo integer! || echo not integer
#忘了shell里乘方是$i**2, 不如((10#$i%1+1))
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 7:58
由 ChenFengyuan
fnan 写了:kose5@kose5-Aspire-4552:~$ read i && echo $i | grep -qP '^\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
-1
not a number
嗯正则出问题了......
改成这个
代码: 全选
read i && echo $i | grep -qP '^-?\d+$' ; if [ $? -eq 0 ];then echo 'a number' ;else echo not a number;fi
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 9:39
由 eexpress
我喜欢atoi。思路也是这种了。
正则去判断全数字的,不稀罕。
shell内建的+1 -1 还是容易点。
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 11:15
由 chengmoYS
fnan 写了:数学表达式结果为零时为逻辑值false,非零是true,所以expr $i + 1 而i=-1时$?返回1,即通常意义的不成功。
试试:
#!/bin/sh
read -p "Please enter an integer: " i
expr $i + 1 > /dev/null 2>&1
if [ $? -ne 2 ]
then
echo "You have enter an integer"
else
echo "You have not enter an integer"
fi
嗯 谢谢大家的思路啊
确实应该用[ $? -ne 2]这个是可以的
代码如下
#!/bin/sh
read -p "Please enter an integer: " -t 5 i
if [ -n "$i" ]
then
expr $i + 0 > /dev/null 2>&1
if [ $? -ne 2 ]
then
echo "integer"
else
echo "not integer"
fi
else
echo "nothing"
fi
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-13 15:33
由 ChenFengyuan
eexpress 写了:我喜欢atoi。思路也是这种了。
正则去判断全数字的,不稀罕。
shell内建的+1 -1 还是容易点。
稀罕干啥?能用就好阿.........要不提交到某cgi,然后再返回?

Re: 判断输入的是整数还是字符串
发表于 : 2011-07-14 9:02
由 chengmoYS
ChenFengyuan 写了:eexpress 写了:我喜欢atoi。思路也是这种了。
正则去判断全数字的,不稀罕。
shell内建的+1 -1 还是容易点。
稀罕干啥?能用就好阿.........要不提交到某cgi,然后再返回?

是阶段性。有些东西是慢慢学的。你看我正则表达式就不太熟。现在就shell学点。
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-14 21:39
由 fnan
shell内建正则法:
read i;[ ${i%%?(-[1-9])*([0-9])} ] && echo not integer! || echo integer.
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-14 22:14
由 fnan
有个疑问,无关算法,有关数学:
-12是整数,+12写法算不算整数?
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-15 9:17
由 chengmoYS
fnan 写了:有个疑问,无关算法,有关数学:
-12是整数,+12写法算不算整数?
算,你可以百度下整数。+号是必要时才写的。一般省略+号就可以了。0既不是正整数,也不是负整数。
问题是,这个程序中,当输入以0开头的字符串,像000(识别为0)、035(识别为35)、-067(识别为67),
所以在为了程序的健壮性,还要对所输入的字符串进行必要的判断。
这个时候可以考虑用正则表达式。
^[+-][1-9][0-9]* 合格的输入
45
+45
-45
0还没有被匹配到
^[+-]0[0-9]* 不合格的输入
-0
+0
-000
+0000
+0544
-0454
Re: 判断输入的是整数还是字符串
发表于 : 2011-07-15 21:42
由 tusooa
代码: 全选
use 5.012;
chomp ($_ = <STDIN>); say /^[+-]\s*\d+$/ ? 'yes' : 'no';