免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7161 | 回复: 5
打印 上一主题 下一主题

Shell有判断变量是否为整型,字符,字符串等的函数吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-08 00:30 |只看该作者 |倒序浏览
Shell有判断变量是否为整型,字符,字符串等的函数吗?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-07-08 00:42 |只看该作者
shell不提供此项功能,不过bash有个declare可以强制一个变量为整数

论坛徽章:
0
3 [报告]
发表于 2008-07-08 11:02 |只看该作者
含有非数字就是字符或者字符串,长度大于一就是字符串:
echo $a|sed 's/[0-9]//g'|wc -c去掉数字后的长度,如果是0就是整型
echo $a|wc -c变量长度,如果是1就是字符,否则就是字符串
但是科学计数法就没发判断了,不过我想用的不多,如果要包含小数的话可以把[0-9]改成[0-9.],但是对于1.2.3这类就麻烦了,要用^[0-9]+(.[0-9]+)?$来判断,其实正则的话,够用就好。

论坛徽章:
0
4 [报告]
发表于 2008-07-08 11:21 |只看该作者
bash

  1. #!/bin/bash
  2. function check(){
  3.         local a="$1"
  4.         printf "%d" "$a" &>/dev/null && echo "integer" && return
  5.         printf "%f" "$a" &>/dev/null && echo "number" && return
  6.         [ ${#a} -eq 1 ] && echo "char" && return
  7.         echo "string"
  8. }

  9. echo ". is" $(check ".")
  10. echo "1 is" $(check "1")
  11. echo ".1 is" $(check ".1")
  12. echo "1. is" $(check "1.")
  13. echo "1234 is" $(check "1234")
  14. echo "1.234 is" $(check "1.234")
  15. echo "1.2.3.4 is" $(check "1.2.3.4")
  16. echo "a1234 is" $(check "a1234")
  17. echo "abc is" $(check "abc")
  18. echo "a is" $(check "a")
  19. echo "1e+2" $(check "1e+2")
  20. echo "1.e+2" $(check "1e+2")
  21. echo ".1e+2" $(check "1e+2")
  22. echo "-1" $(check "-1")
  23. echo "-1.2" $(check "-1.2")
  24. echo "-a" $(check "-a")
复制代码

[ 本帖最后由 springwind426 于 2008-7-8 11:42 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-07-08 11:26 |只看该作者
学习了

论坛徽章:
0
6 [报告]
发表于 2008-07-08 11:50 |只看该作者
修改一下,增加一些异样数据的检测

  1. #!/bin/bash
  2. function check(){
  3.         local a="$1"
  4.         printf "%d" "$a" &>/dev/null && echo "integer" && return
  5.         printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return
  6.         printf "%f" "$a" &>/dev/null && echo "number" && return
  7.         [ ${#a} -eq 1 ] && echo "char" && return
  8.         echo "string"
  9. }

  10. echo ". is" $(check ".")
  11. echo "1 is" $(check "1")
  12. echo ".1 is" $(check ".1")
  13. echo "1. is" $(check "1.")
  14. echo "1234 is" $(check "1234")
  15. echo "1.234 is" $(check "1.234")
  16. echo "1.2.3.4 is" $(check "1.2.3.4")
  17. echo "a1234 is" $(check "a1234")
  18. echo "abc is" $(check "abc")
  19. echo "a is" $(check "a")
  20. echo "1e+2" $(check "1e+2")
  21. echo "1.e+2" $(check "1e+2")
  22. echo ".1e+2" $(check "1e+2")
  23. echo "-1" $(check "-1")
  24. echo "-1.2" $(check "-1.2")
  25. echo "-a" $(check "-a")
  26. echo "0x1f" $(check "0x1f")
  27. echo "0x1H" $(check "0x1H")
  28. echo "0333" $(check "0333")
  29. echo "0999" $(check "0999")
  30. echo "+003" $(check "+003")
  31. echo "+003.3" $(check "+003.3")
复制代码

[ 本帖最后由 springwind426 于 2008-7-8 11:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP