LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 889|回复: 8

怎样判断read读入的值是什么类型?

[复制链接]
发表于 2005-1-29 10:39:36 | 显示全部楼层 |阅读模式
例如我想判断用户输入是否是int,那么应该怎样写,thanks~
发表于 2005-1-29 21:24:58 | 显示全部楼层
shell对于数据类型并没有严格区分,所以没有严格意义上的int or char的类型

若你真希望检查数字,可用[0-9]这样的模式匹配来解决
回复 支持 反对

使用道具 举报

发表于 2005-1-30 13:00:12 | 显示全部楼层
Post by kiron
shell对于数据类型并没有严格区分,所以没有严格意义上的int or char的类型

若你真希望检查数字,可用[0-9]这样的模式匹配来解决


可以写个例子来参考下吗?
回复 支持 反对

使用道具 举报

发表于 2005-2-1 13:45:29 | 显示全部楼层
/^[0-9]+$/
表示有至少1位的数字.^和$表示头和尾,也就是说整个变量从头到尾都是数字.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-2 11:31:26 | 显示全部楼层
但是读入去的是变量,距体怎样写呢,我是初学shell,可以详细说明下吗
if [ $read_in ???? ]
回复 支持 反对

使用道具 举报

发表于 2005-2-2 11:44:29 | 显示全部楼层
比如说:
echo $abc | sed -n '/^[0-9]\+$/p'
这个命令只返回两种情况, 第一就是空,表示变量$abc无法匹配全数字, 第二就是变量值本身,如果是全数字的话. 这样这个命令的值便可以作为if的判断条件了, 如:
if [[ x$(echo $abc | sed -n '/^[0-9]\+$/p') != x ]]

还有就是可以用POSIX标准的通配表达式, /^[[:digit:]]\+$/
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-2 15:50:59 | 显示全部楼层
thanks
回复 支持 反对

使用道具 举报

发表于 2005-2-2 16:58:31 | 显示全部楼层

  1. read;[[ $(echo $REPLY*1|bc -q ) == $REPLY ]]&&echo number||echo string
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-2-3 17:33:49 | 显示全部楼层
楼主什么版本的系统?

我也来一个redhat9.0的:

test if input is int:
  1. read;test "$REPLY" -ne 0 -o "$REPLY" -eq 0 && echo "digit" || echo "string"
复制代码

  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表