首页>教程>Linux 命令手册> Shell 内置命令与编程特性 >Linux expr 命令 - 表达式求值工具

Linux expr 命令 - 表达式求值工具

expr 命令(英文全称为 EXPRESSION)是 Linux / Unix 系统中自带的用于表达式求值的命令,它能够实现对算术运算、字符串操作、逻辑判断、正则匹配等表达式的操作,是 Shell 脚本开发和系统运维中的一款基础工具。

相似功能命令对比

如下给出几个能够进行求值工具,请认清其功能区别:

  • bc 命令:支持高精度浮点运算,功能更加的强大
  • let 命令:Shell 的算术运算求值命令,不支持字符串、正则匹配等功能
  • $(( )) 语法:Shell 内置的算术表达式求值,无字符串处理能力

expr 命令语法

expr 命令的语法形式有两种,如下给出其具体的形式:

expr EXPRESSION
expr OPTION

语法中各部分的说明:

  1. EXPRESSION:需要求值的表达式,支持算术运算、逻辑运算、字符串操作、正则匹配等
  2. OPTION:辅助的选项,只有显示帮助、版本两个基础的选项

表达式的优先级

如下给出支持的表达式从低到高进行运算的优先级:

  1. 逻辑或运算: ARG1 | ARG2
  2. 逻辑与运算: ARG1 & ARG2
  3. 比较运算符: <<==!=>=>
  4. 算术运算符: +-
  5. 算术运算符: */%
  6. 字符串操作: :matchsubstrindexlength
  7. 括号优先运算: ( EXPRESSION )
  8. 强制将关键字或运算符识别为字符串: + TOKEN

使用命令的注意事项说

在使用 expr 命令时,需要注意如下的事项:

  1. 很多的运算符(如 *|&<>)在 Shell 中属于特殊字符,需要使用 \ 进行转义
  2. 当进行比较时:如果两个参数均为数字,执行算术比较;否则按字典序列比较字符串

expr 命令使用示例

如下给出的示例覆盖了大多数的 expr 命令的使用方法。

算术运算示例

如下给出整数加法、乘法、除法与取余的整合示例:

expr 10 + 20  # 加法
expr 10 \* 5  # 乘法
expr 20 / 3  # 除法
expr 20 % 3  # 取余

逻辑运算示例

如下给出逻辑或运算、与运算的使用示例:

expr "" \| "test"  # 或运算
expr 10 \& 20      # 与运算

比较运算示例

比较两个数字的大小:

expr 15 \< 20

如果如上的比较表达式成立,则输出 1,否则输出 0

字符串操作示例

获取字符串长度

使用 length 表达式获取字符串的长度:

expr length "hello linux"

截取子字符串

使用 substr 表达式并指定起始下标和截取的长度,截取对应的字串:

expr substr "linux expr" 2 4

从第2位开始截取4个字符,输出内容为 inux

字符串正则匹配

使用 : 表达式指定正则表达式,来提取指定的信息:

expr "linux123" : "linux\([0-9]*\)"

如果匹配组 () 能够匹配到信息,则会提取相应的信息。

查找字符位置

使用 index 表达式查找字符在字符串中第一次出现的位置:

expr index "apple" "p"

如果输出 0 表示不存在。

强制将关键字作为字符串

使用 + 强制将关键字 match 识别为普通字符串:

expr + "match" : "match"

expr 命令选项

expr 命令只有两个选项,以下为选项的解释说明:

| 选项 功能说明 | | ------------- | ------------------------ | | --help | 显示命令的帮助文档后退出 | | --version | 输出命令的版本信息后退出 |

退出状态码

expr 执行后会返回一个退出状态码,可用于在 Shell 脚本中判断其执行的状态:

  • 0:表达式的结果非空且非 0
  • 1:表达式的结果为空或 0
  • 2:表达式的语法无效;
  • 3:命令执行的过程中发生错误

结语

expr 命令是 Linux / Unix 系统中的一款基础表达式工具,它具有轻量、不依赖其他工具的特点,能够完成基础算术运算,还能实现字符串处理、正则匹配等复杂操作,是一款非常好用的工具,学习完本文的内容后,你一定能掌握 expr 命令的使用方法。

但在使用中需要注意一些运算符需要转义和表达式的语法规范。