Chinaunix

标题: Shell有判断变量是否为整型,字符,字符串等的函数吗? [打印本页]

作者: xwmhmily    时间: 2008-07-08 00:30
标题: Shell有判断变量是否为整型,字符,字符串等的函数吗?
Shell有判断变量是否为整型,字符,字符串等的函数吗?
作者: 寂寞烈火    时间: 2008-07-08 00:42
shell不提供此项功能,不过bash有个declare可以强制一个变量为整数
作者: walkerxk    时间: 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]+)?$来判断,其实正则的话,够用就好。
作者: springwind426    时间: 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 编辑 ]
作者: edei2004    时间: 2008-07-08 11:26
学习了
作者: springwind426    时间: 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 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2