shell 判断一个变量是数字还是字符串

       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中可以使用或(|)运算符来表示过滤多个字符。以后可以随时把表示数的符号加入到里面,这样就算实现判断变量是字符串数,还是其它的字符。

原文地址:https://www.cnblogs.com/liangyou666/p/10877630.html