判断输入的是整数还是字符串
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
判断输入的是整数还是字符串
我在网上搜索到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 ~]$
请问为啥
我写了个脚本如下
#!/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 ~]$
请问为啥
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
数学表达式结果为零时为逻辑值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
试试:
#!/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
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- ChenFengyuan
- 帖子: 770
- 注册时间: 2008-03-23 0:39
Re: 判断输入的是整数还是字符串
代码: 全选
$ 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

-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
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
-1
not a number
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
试试:
read i;((10#$i^2+1)) 2>/dev/null && echo integer! || echo not integer
#忘了shell里乘方是$i**2, 不如((10#$i%1+1))
read i;((10#$i^2+1)) 2>/dev/null && echo integer! || echo not integer
#忘了shell里乘方是$i**2, 不如((10#$i%1+1))
上次由 fnan 在 2011-07-17 12:05,总共编辑 1 次。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
- ChenFengyuan
- 帖子: 770
- 注册时间: 2008-03-23 0:39
Re: 判断输入的是整数还是字符串
嗯正则出问题了......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
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
嗯 谢谢大家的思路啊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
- ChenFengyuan
- 帖子: 770
- 注册时间: 2008-03-23 0:39
Re: 判断输入的是整数还是字符串
稀罕干啥?能用就好阿.........要不提交到某cgi,然后再返回?eexpress 写了:我喜欢atoi。思路也是这种了。
正则去判断全数字的,不稀罕。
shell内建的+1 -1 还是容易点。

-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
是阶段性。有些东西是慢慢学的。你看我正则表达式就不太熟。现在就shell学点。ChenFengyuan 写了:稀罕干啥?能用就好阿.........要不提交到某cgi,然后再返回?eexpress 写了:我喜欢atoi。思路也是这种了。
正则去判断全数字的,不稀罕。
shell内建的+1 -1 还是容易点。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 判断输入的是整数还是字符串
shell内建正则法:
read i;[ ${i%%?(-[1-9])*([0-9])} ] && echo not integer! || echo integer.
read i;[ ${i%%?(-[1-9])*([0-9])} ] && echo not integer! || echo integer.
上次由 fnan 在 2011-07-14 22:17,总共编辑 2 次。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 判断输入的是整数还是字符串
算,你可以百度下整数。+号是必要时才写的。一般省略+号就可以了。0既不是正整数,也不是负整数。fnan 写了:有个疑问,无关算法,有关数学:
-12是整数,+12写法算不算整数?
问题是,这个程序中,当输入以0开头的字符串,像000(识别为0)、035(识别为35)、-067(识别为67),
所以在为了程序的健壮性,还要对所输入的字符串进行必要的判断。
这个时候可以考虑用正则表达式。
^[+-][1-9][0-9]* 合格的输入
45
+45
-45
0还没有被匹配到
^[+-]0[0-9]* 不合格的输入
-0
+0
-000
+0000
+0544
-0454