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

  • 相关阅读:
    221. 最大正方形
    9. 回文数
    2. 两数相加
    1. 两数之和
    HDU 1864 最大报销额
    47 java包打成本地maven
    46 数组中的元素进行位置交换
    5 docker安装kibana
    45 vue图片放大预览
    4 docker中安装es
  • 原文地址:https://www.cnblogs.com/liangyou666/p/10877630.html
Copyright © 2011-2022 走看看