expr

expr 是 Linux 系统中一个强大的命令行工具,主要用于执行算术运算和字符串操作。它可以用来进行基本的数学运算、字符串长度计算以及比较等操作。通过 expr 命令,你可以方便地在脚本或交互式 shell 中完成一些简单的计算任务。

基础用法

算术运算

expr 可以执行加减乘除等基本算术运算。它通常用于需要进行简单数学计算的场景中。

示例:

echo $(expr 10 + 5)      # 输出:15

在上述例子中,expr 10 + 5 执行了两个数的加法操作,并将结果输出。括号 $(...) 用于将命令的输出作为参数传递给 echo

字符串长度计算

除了算术运算外,expr 还可以用来获取字符串的长度。

示例:

string="Hello, World!"
length=$(expr length "$string")
echo $length            # 输出:13

在该示例中,expr length "Hello, World!" 计算了给定字符串的长度,并将结果存储在变量 length 中。

比较操作

expr 还支持比较运算符来判断两个数值或表达式的大小关系。常用的比较运算符包括 -lt(小于)、-le(小于等于)、-eq(等于)、-ne(不等于)、-ge(大于等于)和 -gt(大于)。

示例:

a=10
b=20

if expr $a -lt $b; then
  echo "a is less than b"
else
  echo "a is not less than b"
fi            # 输出:a is less than b

此示例中,expr $a -lt $b 判断 a 是否小于 b。如果条件成立,则输出相应的消息。

高级用法

字符串替换与提取

虽然不是直接的算术或比较运算,但 expr 也可以用于进行基本的字符串处理操作,如提取特定部分。

示例:

str="user@hostname"
user=$(expr match "$str" '\(.*\)@')
echo $user          # 输出:user

在这里,expr match "user@hostname" '\(.*\)@' 使用正则表达式匹配 user 部分,并将其提取出来。

综合示例

下面是一个综合了上述功能的复杂示例:

# 定义变量
num1=20
num2=15

# 计算两个数之和
sum=$(expr $num1 + $num2)
echo "Sum: $sum"       # 输出:Sum: 35

# 获取字符串长度
str="expr is useful"
length=$(expr length "$str")
echo "Length of string: $length"   # 输出:Length of string: 14

# 比较两个数
if expr $num1 -gt $num2; then
  echo "$num1 is greater than $num2"
else
  echo "$num1 is not greater than $num2"
fi          # 输出:num1 is greater than num2

通过这些例子,我们可以看到 expr 命令在实际应用场景中的灵活性和实用性。它不仅适用于简单的算术计算,还能帮助你完成一些基本的字符串处理任务。