• Linux数字运算的常用命令


    一. 双小括号数字运算(())
    可以用来数值运算和数值比较,但只支持整数类型
    1)没有未知数,直接输出运算表达式结果

    [root@db01 ~]# echo $((7*5))
    35
    
    • 1
    • 2

    如果是浮点数或字符串,就会报错

    [root@db01 ~]# echo $((7.5*5))
    -bash: 7.5*5: syntax error: invalid arithmetic operator (error token is ".5*5")
    
    • 1
    • 2

    2)没有未知数,进行数值的比较
    如果结果是正确的,则表示真,会输出1
    如果结果是错误的,则表示假,会输出0

    [root@db01 ~]# echo $((5>2))
    1
    [root@db01 ~]# echo $((20>=20))
    1
    [root@db01 ~]# echo $((5>20))
    0
    [root@db01 ~]# echo $((5>2.5))
    -bash: 5>2.5: syntax error: invalid arithmetic operator (error token is ".5")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    补充:&&表示“与”的作用,前者与后者都为真,整体结果才是真,输出1
    符号||表示“或”的作用,前者与后者只要有一个为真,整体结果就是真,输出1

    [root@db01 ~]# echo $((20>=20&&1>8))
    0
    [root@db01 ~]# echo $((20>=20||1>8))
    1
    
    • 1
    • 2
    • 3
    • 4

    3)含未知数的数值计算
    简单的对变量赋值运算

    [root@db01 ~]# ((a=3))
    [root@db01 ~]# ((a++))
    [root@db01 ~]# echo $a
    4
    [root@db01 ~]# b=$((7/3+4**2))
    [root@db01 ~]# echo $b
    18
    [root@db01 ~]# c=13
    [root@db01 ~]# echo $((++c))
    14
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意:此处的a++表示先给a赋值,再进行(a+1)的运算
    ++a则表示先进行(a+1)的运算,再给a赋值
    一般在Linux或shell编程中区分意义不大。

    二. let运算命令
    本命令也是只适用于整数的字符类型
    首先取消在上文测试所设置的临时环境变量

    unset a b c
    
    • 1

    使用let命令进行测试

    [root@db01 ~]# x=30
    [root@db01 ~]# let x=x**2
    [root@db01 ~]# echo $x
    900
    
    • 1
    • 2
    • 3
    • 4

    此处的let x=x**2等价于((x**2)),但后者运算效率更高

    三. expr命令
    该命令适用于整数类型和字符串长度的匹配运算

    1)不含未知数的简单运算

    [root@db01 ~]# expr 2 \* 3
    6
    [root@db01 ~]# expr 2 / 3
    0
    
    • 1
    • 2
    • 3
    • 4

    在使用expr命令时,两个元素与运算符号直接要有空格符号隔开;
    此外,expr命令的乘法需要转义符号。

    2)含未知数(变量)的运算

    [root@db01 ~]# k=`expr 4 + 3`
    [root@db01 ~]# echo $k
    7
    [root@db01 ~]# h=$(expr 5 + 3)
    [root@db01 ~]# echo $h
    8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    将命令执行的结果赋值给变量,有上述两种方法。
    分别是反引号 Linux命令 反引号$(Linux命令),在shell脚本中也可使用。

    3)计算字符串的长度
    在计算字符串长度的时候,变量必须用双引号括住,并且字符串中的每一个空格也占用一个单位的长度。

    [root@db01 ~]# str="hello world"
    [root@db01 ~]# expr length "$str"
    11
    
    • 1
    • 2
    • 3

    如果格式错误,计算结果也会有差异。下面是错误案例。

    [root@db01 ~]# str="hello world
    [root@db01 ~]# expr length $"str"
    3
    [root@db01 ~]# expr length '$str'
    4
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四. bc命令
    可以计算整数,也可计算浮点数(小数)的字符类型
    首先检查Linux系统中是否有bc命令,如果没有,则先安装软件

    yum install -y bc
    
    • 1

    1)交互式运算
    在命令行输入bc后直接进行加减乘除四则运算

    [root@db01 ~]# bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    3+2
    5
    10*2
    20
    10/3
    3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2)非交互式无变量运算

    [root@db01 ~]# echo 3.14 + 6.28|bc
    9.42
    
    • 1
    • 2

    保留3位小数的运算

    [root@db01 ~]# echo "scale=3;19/7"|bc
    2.714
    
    • 1
    • 2

    3)非交互式含变量运算

    [root@db01 ~]# p=14
    [root@db01 ~]# p=$(echo $p*3|bc)
    [root@db01 ~]# echo $p
    42
    
    • 1
    • 2
    • 3
    • 4

    五. $[]命令运算
    只支持整数数字类型运算

    [root@db01 ~]# echo $[3**3]
    27
    [root@db01 ~]# s=13
    [root@db01 ~]# s=$[s/3]
    [root@db01 ~]# echo $s
    4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    六. awk运算
    可以计算整数浮点数

    [root@db01 ~]# echo "22.98 4.23"|awk '{print ($1+3)/$2}'
    6.14184
    
    • 1
    • 2

    参考书籍:
    <<跟老男孩学Linux运维:Shell编程实战>>

  • 相关阅读:
    PerformanceOne一站式性能测试平台
    国赛练习(1)
    QTableWidget的初始化、批量添加数据、批量添加控件、分页跳转、定位到指定行、添加/插入/删除行的功能实现
    【电脑使用】iPad or Android快速访问Windows文件
    说句实在话,90%项目经理都不会带团队
    工厂因封控停工,客户问到一般怎么说?
    pandas使用分位数+控制变量法进行多条件数据筛选
    云之道知识付费v1.5.4小程序+前端(含pc付费插件)
    苹果ios系统IPA包企业签名手机下载应用可以有几种方式可以下载到手机?
    VUE element Tree 没有子级时隐藏展开图标
  • 原文地址:https://blog.csdn.net/oldboy1999/article/details/125802089