Linux bc 命令(完整教程)

Linux bc 命令:在终端里做数学计算的“瑞士军刀”

你有没有遇到过这样的场景?在 Linux 终端里写脚本,需要做几个浮点数运算,比如计算平均分、百分比、汇率转换……结果发现 exprawk 有点不够用,连小数都算不准。这时候,Linux bc 命令 就是你最值得信赖的伙伴。

它不像 expr 那样只支持整数,也不像 awk 那样需要额外学习语法。bc 是一个任意精度的计算器语言,支持小数、科学计数法、变量、函数,甚至还能写循环。它就像你随身携带的计算器,但比手机上的更强大、更灵活。

接下来,我会带你从零开始掌握 Linux bc 命令,从最基础的用法到进阶技巧,全部用真实代码演示,保证你看懂、能用、会用。


基础用法:直接在命令行做计算

bc 最简单的用法,就是直接在终端输入表达式。它会立刻返回计算结果。

echo "10 + 5 * 3" | bc

💡 注释:echo 将表达式传给 bc| 是管道符,把输出作为输入。这个命令会输出 25,因为 bc 会按数学规则先算乘法再加法。

你也可以直接启动 bc 交互模式,输入完表达式按回车即可:

bc

进入后,输入:

5 + 7 * 2

按下回车,输出:

19

📌 小提示:在交互模式下,你可以连续输入多个表达式,bc 会逐个计算。按 Ctrl + D 退出。


支持小数:告别整数计算的局限

expr 只能处理整数,比如 expr 5 / 2 返回 2,但你真正想要的是 2.5bc 正好解决了这个问题。

echo "5 / 2" | bc

💡 注释:这个命令输出 2,因为默认精度是 0,即不保留小数。如果要保留小数,需要设置 scale 变量。

echo "scale=2; 5 / 2" | bc

💡 注释:scale=2 表示保留两位小数。5 / 2 结果是 2.50scalebc 的关键参数,控制小数点后保留几位。

你还可以设置更多位数:

echo "scale=4; 10 / 3" | bc

💡 注释:输出 3.3333,即 10 除以 3 的前四位小数。scale 越大,精度越高,但计算时间也略长。


变量与表达式:让计算更有“记忆”

bc 支持变量,就像你在编程中用的变量一样。

echo "a = 10; b = 3; a * b + 5" | bc

💡 注释:这里定义了变量 ab,然后计算 a * b + 5,结果是 35。注意:变量赋值用 =,表达式之间用分号分隔。

你也可以在交互模式中操作:

bc
a = 15
b = 4
c = a / b
c

💡 注释:输入 c 后,bc 会输出 3.75,前提是 scale 已经设置为至少 2。


函数定义:把常用计算封装起来

bc 支持函数定义,你可以把常用的数学运算封装成函数,像写脚本一样复用。

echo '
define square(x) {
    return x * x
}
square(5)
' | bc

💡 注释:define square(x) 定义一个名为 square 的函数,参数是 x。函数体用大括号包裹,return 返回结果。调用 square(5) 输出 25

你还可以写更复杂的函数,比如计算圆面积:

echo '
define area_of_circle(r) {
    scale = 4
    pi = 3.1416
    return pi * r * r
}
area_of_circle(3)
' | bc

💡 注释:这个函数计算半径为 3 的圆面积,结果是 28.2744。注意 scale = 4 在函数内部设置精度,避免影响全局。


循环与条件:让 bc 也能“写程序”

别小看 bc,它支持 for 循环和 if 条件判断,可以实现简单的逻辑控制。

for 循环:遍历数字

echo '
for (i = 1; i <= 5; i++) {
    print i, " squared is ", i * i, "\n"
}
' | bc

💡 注释:for (i = 1; i <= 5; i++) 表示从 1 开始,每次加 1,直到 i 大于 5 停止。print 用于输出内容,\n 是换行符。输出如下:

1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25

if 条件判断:判断奇偶数

echo '
n = 7
if (n % 2 == 0) {
    print "Even\n"
} else {
    print "Odd\n"
}
' | bc

💡 注释:% 是取模运算,n % 2 == 0 判断是否为偶数。输出 Odd,因为 7 是奇数。


实用场景:在脚本中使用 bc

bc 最大的价值,是在 shell 脚本中做高精度计算。比如计算文件大小、内存使用率、百分比等。

场景 1:计算两个数字的百分比

#!/bin/bash
total=250
part=87

percentage=$(echo "scale=2; (part * 100) / total" | bc)

echo "占比:$percentage%"

💡 注释:这个脚本计算 87 / 250 * 100,结果是 34.80%scale=2 确保小数点后保留两位。

场景 2:转换温度(摄氏度转华氏度)

#!/bin/bash
celsius=25

fahrenheit=$(echo "scale=1; celsius * 9 / 5 + 32" | bc)

echo "$celsius°C = $fahrenheit°F"

💡 注释:公式是 F = C × 9/5 + 32。输出 25°C = 77.0°Fscale=1 保留一位小数。


高级技巧:设置默认精度和自定义函数库

你可以通过环境变量或配置文件,让 bc 默认启用某些设置。

设置全局 scale

在你的 shell 配置文件(如 ~/.bashrc)中添加:

export BC_ENVIRONMENT=1

然后创建 ~/.bcrc 文件,写入:

scale = 4

这样每次启动 bc,都会自动加载这个文件,scale 默认为 4。

使用自定义函数库

你可以把常用函数保存为一个文件,比如 math.bc

define factorial(n) {
    if (n <= 1) return 1
    return n * factorial(n - 1)
}

define gcd(a, b) {
    while (b != 0) {
        temp = b
        b = a % b
        a = temp
    }
    return a
}

然后在脚本中使用:

echo "factorial(5)" | bc -l math.bc

💡 注释:-l 参数加载数学库(包含 s, c, l 等函数),math.bc 是自定义函数文件。输出 120


常见问题与注意事项

问题 原因 解决方案
小数结果是整数 scale 未设置 添加 scale=2
表达式错误 缺少分号或括号 ; 分隔语句,{} 包裹块
无法使用变量 未赋值或拼写错误 检查变量名是否一致
不能用 if 语法错误 确保 if (条件) { } 格式正确

总结

Linux bc 命令 不只是一个计算器,它是一个功能完整的脚本语言,特别适合在 shell 脚本中做高精度数学计算。它支持变量、函数、循环、条件判断,甚至可以加载自定义函数库。

无论你是初学者还是中级开发者,掌握 bc 都能让你在处理数值计算时更加得心应手。它不依赖图形界面,不占用资源,运行在终端中,响应迅速,是 Linux 工具链中不可替代的“瑞士军刀”。

下次你再遇到浮点数计算问题,别再用 exprawk 勉强应付了。试试 Linux bc 命令,它会让你的脚本更专业、更准确。