在Linux Shell中,算术运算符包括:+(加运算)、-(减运算)、(乘运算)、/(除运算)、%(取余运算)、*(幂运算),这些算术运算符的举例及其结果如下表所示:
运算符 | 举例 | 结果 |
+(加运算) | 3+5 | 8 |
-(减运算) | 5-3 | 2 |
*(乘运算) | 5*3 | 15 |
/(除运算) | 8/3 | 2 |
%(取余运算) | 15%4 | 3 |
**(幂运算) | 5**3 | 125 |
四种语法对比总览
| 语法 | 名称 | 作用 | 示例 |
|---|---|---|---|
${var} | 变量引用 | 引用变量的值 | echo ${name} |
$(command) | 命令替换 | 执行命令并返回结果 | echo $(date) |
$[expression] | 算术运算(旧) | 整数计算 | echo $[1+2] |
$((expression)) | 算术运算(标准) | 整数计算(推荐) | echo $((1+2)) |
1. ${var} – 变量引用
# 引用变量的值
name="John"
echo ${name}
# 输出:John
# 可以省略大括号(但有时必须用)
echo $name
# 输出:John
# 必须用大括号的场景
echo ${name}_suffix
# 输出:John_suffix
echo $name_suffix # 错误!会找 name_suffix 这个变量
2. $(command) – 命令替换
# 执行命令,把输出作为值
echo $(date)
# 输出:2026年 03月 02日 星期一 15:30:00 CST
# 旧语法(不推荐)
echo `date`
# 输出:同上
3. $[expression] – 算术运算(旧语法)
# 整数算术运算(已被 $(( )) 取代)
echo $[1+2]
# 输出:3
num=5
echo $[num*2] # 变量前的 $ 可以省略
# 输出:10
4. $((expression)) – 算术运算(标准语法)
# 推荐使用的算术运算
echo $((1+2))
# 输出:3
num=5
echo $((num*2)) # 变量前的 $ 可以省略
# 输出:10
# 复杂运算
echo $((2+3**2-1001%5))
# 输出:2+9-1 = 10
一句话总结
| 语法 | 记法 | 用途 |
|---|---|---|
${var} | 花括号 | 取变量值 |
$(cmd) | 圆括号+美元 | 执行命令 |
$[expr] | 方括号 | 算术运算(旧) |
$((expr)) | 双圆括号 | 算术运算(标准) |
Shell内置命令——let
let 命令详解
let 是 Bash 的内置算术运算命令,功能类似 $(( )),但语法稍有不同。我来帮你整理清楚:
📊 let 命令要点
| 特性 | 说明 | 示例 |
|---|---|---|
| 作用 | 整数算术运算 | let a=1+2 |
| 变量赋值 | 直接修改变量 | let num+=5 |
| 空格问题 | 不能有空格! | let num=1+2 ✅ |
| 引号解决 | 用引号包起来 | let "num = 1 + 2" ✅ |
🔍 基本用法
1. 最简单的算术运算
num2=1 echo $num2 # 输出:1 let num2=4+1 echo $num2 # 输出:5 let num2=$num2+1 echo $num2 # 输出:6
2. 赋值符号和运算符两边不能有空格!
# ❌ 错误 let num2 = 4 + 1 # bash: let: =: 语法错误 # ✅ 正确(无空格) let num2=4+1 # ✅ 正确(用引号包起来) let "num2 = 4 + 1"
🎯 let 的便捷写法
num=5 # 自增 let num+=2 echo $num # 输出:7 # 自减 let num-=3 echo $num # 输出:4 # 乘法 let num*=3 echo $num # 输出:12 # 除法 let num/=2 echo $num # 输出:6
📝 expr 命令详解
expr 是一个通用的表达式计算命令,能处理算术、比较、字符串和逻辑运算。但它有个特点:所有操作数和运算符之间必须有空格,而且有些符号需要转义!
📊 expr 命令特点
| 特性 | 说明 | 示例 |
|---|---|---|
| 空格分隔 | 每个部分都要空格 | expr 2 + 3 |
| 乘法转义 | * 要用 \* | expr 5 \* 3 |
| 括号转义 | () 要用 \( \) | expr \( 2 + 3 \) \* 4 |
| 返回值 | 计算结果输出到屏幕 | expr 1 + 2 → 输出 3 |
🔍 基本算术运算
1. 加减乘除取余
# 加法
expr 5 + 3
# 输出:8
# 减法
expr 5 - 3
# 输出:2
# 乘法(注意转义)
expr 5 \* 3
# 输出:15
# 除法
expr 10 / 3
# 输出:3(整数除法)
# 取余
expr 10 % 3
# 输出:1
2. 复杂表达式
# 2 + 5 * 2 - 3 % 2
expr 2 + 5 \* 2 - 3 % 2
# 计算过程:2 + 10 - 1 = 11
# 输出:11
3. 带括号的表达式(必须转义)
# (2 + 5) * 2 - 3
expr \( 2 + 5 \) \* 2 - 3
# 计算过程:(7) * 2 - 3 = 14 - 3 = 11
# 输出:11
🎯 字符串运算
1. 计算字符串长度
expr length "Hello World"
# 输出:11
2. 提取子串
# substr 字符串 起始位置 长度(位置从1开始)
expr substr "Hello World" 7 5
# 输出:World
3. 查找字符位置
# index 字符串 字符集
expr index "Hello World" "o"
# 输出:5(第一个 o 在第5位)
expr index "Hello World" "xyz"
# 输出:0(没找到)
📝 比较运算
1. 数字比较
# 相等
expr 5 = 5
# 输出:1(真)
expr 5 = 3
# 输出:0(假)
# 不等
expr 5 != 3
# 输出:1
# 大于
expr 5 \> 3
# 输出:1
# 小于等于(需要组合)
expr 5 \< 3
# 输出:0
2. 字符串比较
# 比较字符串(按字典序)
expr "abc" \< "def"
# 输出:1
expr "abc" = "abc"
# 输出:1
💡 逻辑运算
# 与运算
expr 5 \> 3 \& 4 \< 6
# 输出:1
# 或运算
expr 5 \> 3 \| 4 \> 6
# 输出:1
⚠️ 重要注意事项
1. 空格必须
# ❌ 错误
expr 5+3
# ✅ 正确
expr 5 + 3
2. 转义特殊字符
expr 5 * 3 # ❌ 错误,* 被 shell 展开
expr 5 \* 3 # ✅ 正确
expr (2+3) # ❌ 错误,括号被 shell 解释
expr \( 2 + 3 \) # ✅ 正确
3. 返回值处理
# expr 的结果直接输出
result=$(expr 5 + 3)
echo $result
# 输出:8
# 判断比较结果
if expr 5 \> 3 > /dev/null; then
echo "5 大于 3"
fi
📊 expr vs let vs $(( )) 对比
| 特性 | expr | let | $(( )) |
|---|---|---|---|
| 空格要求 | 必须空格 | 不能有空格 | 可有空格 |
| 乘法 | \* | * | * |
| 括号 | \( \) | 不支持 | ( ) |
| 字符串运算 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 返回值 | 输出结果 | 返回状态 | 返回结果 |
| 性能 | 较慢(外部命令) | 快(内置) | 快(内置) |
✅ 一句话总结
expr 是全能型表达式计算器,能做算术、比较、字符串运算,但必须用空格分隔,特殊字符要转义,适合简单计算和字符串处理。
发表回复