expr表达式计算

2025-04发布6次浏览

expr 表达式计算

expr 是 Unix/Linux 系统中的一个命令行工具,用于执行表达式计算并输出结果。它可以处理算术运算、字符串操作和逻辑比较等任务。尽管现代脚本语言(如 Python 或 Bash 内置功能)可以更方便地完成这些任务,但了解 expr 命令仍然是非常有帮助的,尤其是在需要兼容旧系统或简单脚本时。

一、基本语法

expr 的基本语法如下:

expr expression

其中 expression 是要计算的表达式。表达式可以是数字、字符串或逻辑运算符的组合。

注意:expr 命令对空格非常敏感,每个操作符和操作数之间必须用空格分隔。


二、算术运算

expr 支持基本的算术运算,包括加法、减法、乘法、除法和取模。

1. 加法

expr 5 + 3

输出:

8

2. 减法

expr 5 - 3

输出:

2

3. 乘法

乘法符号 * 在 Shell 中是一个通配符,因此需要用反斜杠 \ 转义。

expr 5 \* 3

输出:

15

4. 除法

expr 6 / 3

输出:

2

5. 取模

expr 5 % 3

输出:

2

注意事项expr 默认只支持整数运算,无法直接处理浮点数。


三、字符串操作

expr 还可以用于字符串的长度计算和匹配操作。

1. 计算字符串长度

expr length "Hello World"

输出:

11

2. 字符串匹配

使用正则表达式匹配字符串中的子串位置。

expr match "HelloWorld" 'Hello.*'

输出:

5

解释:返回匹配部分的长度(这里是 "Hello" 的长度为 5)。


四、逻辑运算

expr 支持逻辑运算符,用于比较两个值。

1. 等于

expr 5 = 5

输出:

1

如果相等,返回 1;否则返回 0。

2. 不等于

expr 5 != 3

输出:

1

3. 大于、小于、大于等于、小于等于

expr 5 \> 3   # 大于
expr 5 \< 3   # 小于
expr 5 >= 3   # 大于等于
expr 5 <= 3   # 小于等于

五、实践示例

示例 1:计算两个数的和

#!/bin/bash

read -p "请输入第一个数字: " num1
read -p "请输入第二个数字: " num2

sum=$(expr $num1 + $num2)
echo "两数之和为: $sum"

运行结果:

请输入第一个数字: 10
请输入第二个数字: 20
两数之和为: 30

示例 2:判断字符串是否以特定前缀开头

#!/bin/bash

str="HelloWorld"
prefix="Hello"

if [ $(expr match "$str" "$prefix.*") -gt 0 ]; then
    echo "字符串以 '$prefix' 开头"
else
    echo "字符串不以 '$prefix' 开头"
fi

运行结果:

字符串以 'Hello' 开头

六、扩展知识

  1. 替代工具:在现代 Shell 脚本中,通常使用 (( ))$(( )) 来进行算术运算,或者使用 [[ ]] 和正则表达式进行字符串匹配。这些方法更加简洁且功能强大。

    sum=$((5 + 3))
    echo $sum  # 输出 8
    
  2. 限制expr 只能处理简单的表达式,对于复杂的数学运算或字符串操作,推荐使用专门的工具(如 bcawk)。

  3. 错误处理:如果表达式无效或输入错误,expr 会返回错误信息。例如:

    expr 5 +
    

    输出:

    expr: syntax error