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
#!/bin/bash
function check(){
local a="$1"
printf "%d" "$a" &>/dev/null && echo "integer" && return
printf "%f" "$a" &>/dev/null && echo "number" && return
[ ${#a} -eq 1 ] && echo "char" && return
echo "string"
}
echo ". is" $(check ".")
echo "1 is" $(check "1")
echo ".1 is" $(check ".1")
echo "1. is" $(check "1.")
echo "1234 is" $(check "1234")
echo "1.234 is" $(check "1.234")
echo "1.2.3.4 is" $(check "1.2.3.4")
echo "a1234 is" $(check "a1234")
echo "abc is" $(check "abc")
echo "a is" $(check "a")
echo "1e+2" $(check "1e+2")
echo "1.e+2" $(check "1e+2")
echo ".1e+2" $(check "1e+2")
echo "-1" $(check "-1")
echo "-1.2" $(check "-1.2")
echo "-a" $(check "-a")
复制代码
[
本帖最后由 springwind426 于 2008-7-8 11:42 编辑
]
作者:
edei2004
时间:
2008-07-08 11:26
学习了
作者:
springwind426
时间:
2008-07-08 11:50
修改一下,增加一些异样数据的检测
#!/bin/bash
function check(){
local a="$1"
printf "%d" "$a" &>/dev/null && echo "integer" && return
printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return
printf "%f" "$a" &>/dev/null && echo "number" && return
[ ${#a} -eq 1 ] && echo "char" && return
echo "string"
}
echo ". is" $(check ".")
echo "1 is" $(check "1")
echo ".1 is" $(check ".1")
echo "1. is" $(check "1.")
echo "1234 is" $(check "1234")
echo "1.234 is" $(check "1.234")
echo "1.2.3.4 is" $(check "1.2.3.4")
echo "a1234 is" $(check "a1234")
echo "abc is" $(check "abc")
echo "a is" $(check "a")
echo "1e+2" $(check "1e+2")
echo "1.e+2" $(check "1e+2")
echo ".1e+2" $(check "1e+2")
echo "-1" $(check "-1")
echo "-1.2" $(check "-1.2")
echo "-a" $(check "-a")
echo "0x1f" $(check "0x1f")
echo "0x1H" $(check "0x1H")
echo "0333" $(check "0333")
echo "0999" $(check "0999")
echo "+003" $(check "+003")
echo "+003.3" $(check "+003.3")
复制代码
[
本帖最后由 springwind426 于 2008-7-8 11:55 编辑
]
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2