linux shell 编程:算术运算符

需要掌握:linux shell 编程:实现运算(expr、$((…))、bc计算浮点数)

介绍

在 Shell 编程中,算术运算主要分为 整数运算 和 浮点数运算 两类,Shell 本身 仅支持整数运算,浮点数需借助外部工具(如 bc、awk)实现。

整数算术运算

使用 $((...))(推荐)

这是最常用的整数运算方式,支持 +、-、*、/、%(取模)、**(幂运算)等:

#!/bin/bash

a=10
b=3

# 加法
echo "$a + $b = $((a + b))"  # 输出:10 + 3 = 13

# 减法
echo "$a - $b = $((a - b))"  # 输出:10 - 3 = 7

# 乘法(注意:* 无需转义)
echo "$a * $b = $((a * b))"  # 输出:10 * 3 = 30

# 除法(整数除法,向下取整)
echo "$a / $b = $((a / b))"  # 输出:10 / 3 = 3

# 取模(余数)
echo "$a % $b = $((a % b))"  # 输出:10 % 3 = 1

# 幂运算
echo "$a ** $b = $((a ** b))"  # 输出:10 ** 3 = 1000

# 复合运算(赋值+运算)
((a += 5))  # 等价于 a = a + 5
echo "a += 5 后:$a"  # 输出:a += 5 后:15

使用 expr 命令(老式方法)

expr 是早期 Shell 的算术工具,语法较繁琐(运算符需空格分隔,* 需转义):

#!/bin/bash

m=15
n=4

# 加法
sum=$(expr $m + $n)
echo "$m + $n = $sum"  # 输出:15 + 4 = 19

# 乘法(* 需转义)
product=$(expr $m \* $n)
echo "$m * $n = $product"  # 输出:15 * 4 = 60

浮点数算术运算(需外部工具)

Shell 本身不支持浮点数,需借助 bc(计算器工具)或 awk 实现:

1. 使用 bc 工具

bc 支持浮点数运算,通过 scale 设置小数位数:

#!/bin/bash

num1=3.14
num2=2.5

# 加法(保留2位小数)
echo "scale=2; $num1 + $num2" | bc  # 输出:5.64

# 乘法(保留3位小数)
echo "scale=3; $num1 * $num2" | bc  # 输出:7.850

# 除法(保留4位小数)
echo "scale=4; $num1 / $num2" | bc  # 输出:1.2560

2. 使用 awk 工具

awk 内置浮点数支持,适合复杂运算:

#!/bin/bash

a=5.5
b=2.2

# 计算 (a + b) * 2
result=$(awk -v x="$a" -v y="$b" 'BEGIN{print (x + y) * 2}')
echo "(a + b) * 2 = $result"  # 输出:(a + b) * 2 = 15.4

总结

  1. 整数运算:优先用 $((...))(简洁高效),其次是 let;老式脚本可能用 expr。
  2. 浮点数运算:用 bc(简单运算)或 awk(复杂运算),通过 scale 控制小数位数。
  3. 运算符支持:整数支持 +、-、*、/、%、**;浮点数需借助外部工具实现所有运算。

根据运算类型选择对应方法,整数运算用 Shell 内置语法,浮点数运算借助 bc 或 awk 即可满足需求!


原文出处:/show_1GW2GDFx9ga7.html