shell脚本中如何判断一个变量是数字还是字符串,其实本身shell脚本中的所有变量值都是字符串,其中的数字也是数字字符串,只是人为的增加了数字的概念,具体可以参考如下内容。
1、判断一个变量的值是否为整数:
可以借助于grep命令,结合正则表达式,整数是有[0-9]这10个数字组成,如果字串中有不是这10个数字的字符即表示不是整数,用正则表达式表示为[^0-9],编写代码如下:
while true
do
read -p "input value:" var;
if [[ $var == q || $var == Q ]];then
exit;
fi
echo "$var" | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
done
2、判断一个变量的值是否为小数:
根据上面代码,当输入1.2的时候,就不能判断为一个数了,要保证带小数点的数也能正常判断,可以借助于sed命令,通过其s替换操作,将变量值的“."替换掉即可。只要在上面的倒数第二条echo命令改为:
echo "$var" |sed 's/.//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
3、判断一个变量的值是否为正数或者负数:
根据上一步代码,当输入-1.2的时候,就不能判断为一个数了,要保证正负数也能正常判断,与2中的方法类似可以借助sed过滤掉+和-号即可。
echo "$var" |sed 's/.//g' | sed 's/-//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
4、简化代码,数还可能是百分数比如15%,还有可能是指数,可以让sed一次性全部过滤。将上面的代码修改为:
echo "$var" |sed 's/.|-|+|%|^//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
说明:在sed中可以使用或(|)运算符来表示过滤多个字符。以后可以随时把表示数的符号加入到里面,这样就算实现判断变量是字符串数,还是其它的字符。