• Linux shell编程学习笔记10:expr命令 和 算术运算


    Linux Shell 脚本编程和其他编程语言一样,支持算数、关系、布尔、字符串、文件测试等多种运算。上节我们研究了  Linux shell编程 中的 字符串运算,今天我们研究 Linux shell编程的算术运算 ,为了方便举例,我们同时对expr命令进行介绍。

    一、expr命令的用法

    expr(evaluate expressions)命令是Unix/Linux中的一个命令行表达式计算工具,一般用于整数值计算,但也可用于字符串操作。 之些我们也在一些实例使用了这个命令,这次我们对这个命令作一个详细的介绍。

    在Linux终端输入命令expr --help,可以查看expr命令的帮助信息。

    user @host: ~ $ expr --help
    用法:expr 表达式
     或:expr 选项

          --help        显示此帮助信息并退出
          --version        显示版本信息并退出

    将表达式的值列印到标准输出,分隔符下面的空行可提升算式优先级。
    可用的表达式有:

      ARG1 | ARG2       若ARG1 的值不为0 或者为空,则返回ARG1,否则返回ARG2

      ARG1 & ARG2       若两边的值都不为0 或为空,则返回ARG1,否则返回 0

      ARG1 < ARG2       ARG1 小于ARG2
      ARG1 <= ARG2      ARG1 小于或等于ARG2
      ARG1 = ARG2       ARG1 等于ARG2
      ARG1 != ARG2      ARG1 不等于ARG2
      ARG1 >= ARG2      ARG1 大于或等于ARG2
      ARG1 > ARG2       ARG1 大于ARG2

      ARG1 + ARG2       计算 ARG1 与ARG2 相加之和
      ARG1 - ARG2       计算 ARG1 与ARG2 相减之差

      ARG1 * ARG2       计算 ARG1 与ARG2 相乘之积
      ARG1 / ARG2       计算 ARG1 与ARG2 相除之商
      ARG1 % ARG2       计算 ARG1 与ARG2 相除之余数

      字符串 : 表达式        定位字符串中匹配表达式的模式

      match 字符串 表达式        等于"字符串 :表达式"
      substr 字符串 偏移量 长度    替换字符串的子串,偏移的数值从 1 起计
      index 字符串 字符        在字符串中发现字符的地方建立下标,或者标0
      length 字符串            字符串的长度
      + TOKEN                    interpret TOKEN as a string, even if it is a
                                   keyword like 'match' or an operator like '/'

      ( EXPRESSION )             value of EXPRESSION

    请注意有许多运算操作符都可能需要由 shell 先实施转义。
    如果参与运算的 ARG 自变量都是数字,比较符就会被视作数学符号,否则就是多义的。
    模式匹配会返回"\"和"\"之间被匹配的子字符串或空(null);如果未使用"\"和"\",
    则会返回匹配字符数量或是 0。

    若表达式的值既不是空也不是 0,退出状态值为 0;若表达式的值为空或为 0,
    退出状态值为 1。如果表达式的句法无效,则会在出错时返回退出状态值 3。

    GNU coreutils online help:
    请向 报告expr 的翻译错误
    Full documentation at:
    or available locally via: info '(coreutils) expr invocation'       

     

    已经说得非常详细了。

    下面我结合算术运算符的实例来进一步加深对expr命令的认识。

    二、Linux Shell脚本编程中的算术运算符

    运算符说明
    +加法
    -减法
    *乘法
    /除法
    %取余
    =赋值
    ==相等。用于比较两个数字,相同则返回 1(true),否则返回0(false)。
    !=不相等。用于比较两个数字,不相同则返回 1(true),否则返回0(false)。

    对于熟悉C/C++/Java/Javascrpt等语言的用户说,这些运算符很眼熟吧。 Linux Shell脚本编程中的算术运算符 与 C/C++/Java/Javascrpt等语言是相同的。

    但是在具体应用上,Linux Shell脚本编程中有3点需要特别注意:

    1.赋值运算符=

    我们之前也强调过,赋值运算符=两边不能用空格分隔。

    例如定义变量var1并初始化赋值为"abc",正确写法是var1="abc"。

    user @host: ~ $ var1 = "abc"
    var1:未找到命令
    user @host: ~ $ var1="abc"
    user @host: ~ $ echo $var1

    abc

    user @host: ~ $

    2.乘法运行符*

    使用乘法运行符*时,通常要在它前面加上转意符/。

    3.除了赋值运算符=外,其它运算符两侧均需要用空格与运算对象分隔。

    我们结合下面的操作实例来体验。

    三、Linux Shell算术运算操作实例

    user @host: ~ $ d1=2
    user @host: ~ $ d2=3
    user @host: ~ $ echo `expr $d1 + $d2`
    5
    user @host: ~ $ echo `expr $d1 - $d2`
    -1
    user @host: ~ $ echo `expr $d1 * $d2`
    expr: 语法错误

    user @host: ~ $ echo `expr $d1 \* $d2`
    6
    user @host: ~ $ echo `expr $d1 / $d2`
    0
    user @host: ~ $ echo `expr $d1 % $d2`
    2
    user @host: ~ $ echo `expr $d1 == $d2`
    0
    user @host: ~ $ echo `expr $d1 != $d2`
    1
    user @host: ~ $ echo `expr $d1!=$d2`

    2!=3

    user @host: ~ $ 

    在上面的例子中,我们先后定义了变量d1和d2,并初始化赋值为2和3,然后对d1和d2分别进行加、减、乘、除、取余、相等 和不相等运算。

    在进行乘法运算时,如果乘号*前面没有放转义符\,命令会出错:

    expr: 语法错误

    在最后一条命令

    echo `expr $d1!=$d2`

    中 不等于运算符!=和运算对象变量d1和d2之间没有放空格来间隔,!=被当成字符串原样输出:

    2!=3

    特别说明一点,上面实例中echo命令行中使用的是反引号,不是单引号。 

  • 相关阅读:
    docker笔记8:Docker网络
    数据结构初阶--单链表(讲解+类模板实现)
    《React扩展知识二》PureComponent / render props / Error boundary /组件通信方式总结
    从零开始制作【立体键盘】,画UI免写CSS,【盲打练习】的交互逻辑只用了10来行表达式!
    LeetCode-998. 最大二叉树 II【最大二叉树】
    分类预测 | Matlab实现基于PSO-SDAE粒子群优化算法优化堆叠去噪自编码器的数据分类预测
    Jest 一些报错信息
    Springboot集成ip2region离线IP地名映射
    视觉SLAM数据集(三):KITTI 数据集
    kafka 开启认证授权
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/133763406