Linux 学习资料 https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8
一、命令简介
bc(Basic Calculator)是一个支持任意精度计算的交互式计算器语言,作为 GNU 项目的一部分。它提供了强大的数学运算能力,特别适用于脚本中需要精确计算的场景,如浮点运算、高精度计算等,弥补了 Bash 内置算术运算的不足。
该命令默认支持交互式输入,也可通过管道、文件批量执行计算表达式。
二、语法格式
bash
运行
bc [选项] [文件...]
常用调用方式:
- 交互模式:直接输入
bc进入交互式计算环境。 - 管道模式:通过管道传递表达式,例如
echo "表达式" | bc。 - 文件模式:执行包含 bc 代码的文件,例如
bc 计算文件.bc。
三、常用选项及说明
表格
| 选项 | 说明 |
|---|---|
-i | 强制进入交互式模式 |
-l | 加载标准数学库,启用高级数学函数(三角函数、对数等) |
-w | 对 POSIX bc 的扩展语法给出警告信息 |
-q | 安静模式,不打印 GNU bc 的欢迎信息 |
-v | 显示 bc 版本信息 |
-h | 显示帮助信息 |
-s | 使用 POSIX 标准语法(禁用 GNU 扩展) |
-e <表达式> | 执行表达式后退出(GNU 扩展) |
-f <文件> | 执行文件中的代码(GNU 扩展) |
四、示例用法
4.1 基本算术运算
bash
运行
# 加法
echo "5 + 3" | bc # 输出: 8
# 减法
echo "10 - 4.5" | bc # 输出: 5.5
# 乘法(支持浮点数)
echo "2.5 * 3" | bc # 输出: 7.5
# 除法(默认整数除法)
echo "10 / 3" | bc # 输出: 3
# 取模
echo "10 % 3" | bc # 输出: 1
4.2 控制小数精度
通过 scale 变量设置保留小数位数。
bash
运行
# 设置小数位数为 2
echo "scale=2; 10 / 3" | bc # 输出: 3.33
# 设置小数位数为 5
echo "scale=5; 1 / 7" | bc # 输出: .14285
# 复杂表达式精度控制
echo "scale=4; (2.5 + 3.7) * 1.2 / 0.5" | bc # 输出: 14.8800
4.3 进制转换
ibase 为输入进制,obase 为输出进制。
bash
运行
# 十进制转二进制
echo "obase=2; 192" | bc # 输出: 11000000
# 二进制转十进制
echo "obase=10; ibase=2; 11000000" | bc # 输出: 192
# 十进制转十六进制
echo "obase=16; 255" | bc # 输出: FF
# 十六进制转十进制
echo "obase=10; ibase=16; FF" | bc # 输出: 255
4.4 使用数学库(-l 选项)
-l 会加载数学库并默认 scale=20。
bash
运行
# 平方根
echo "sqrt(100)" | bc -l # 输出: 10.00000000000000000000
# 自然对数
echo "l(2.71828)" | bc -l # 输出: .99999932734728277330
# 指数函数 e^1
echo "e(1)" | bc -l # 输出: 2.71828182845904523536
# 正弦函数(弧度)
echo "s(3.14159/2)" | bc -l # 输出: .99999999999999999999
# 余弦函数
echo "c(0)" | bc -l # 输出: 1.00000000000000000000
# 反正切函数
echo "a(1)" | bc -l # 输出: .78539816339744830961
# 计算 π
echo "4*a(1)" | bc -l # 输出: 3.14159265358979323844
4.5 幂运算
bash
运行
# 平方
echo "10^2" | bc # 输出: 100
# 立方
echo "2^3" | bc # 输出: 8
# 大数幂运算
echo "2^100" | bc
# 输出: 1267650600228229401496703205376
4.6 变量和复杂计算
bash
运行
# 使用变量
echo "x=5; y=3; x*y + 2" | bc # 输出: 17
# 多行计算
bc << EOF
scale=3
a=10.5
b=3.2
a/b
a%b
EOF
# 输出:
# 3.281
# .900
4.7 从文件执行
创建计算文件 calc.bc:
plaintext
scale=4
pi=3.14159
radius=5
area=pi*radius^2
print "半径为 ", radius, " 的圆面积: ", area, "\n"
执行文件:
bash
运行
bc -q calc.bc
# 输出: 半径为 5 的圆面积: 78.5397
4.8 条件判断和循环(自定义函数)
bash
运行
# 计算阶乘
bc << EOF
define factorial(n) {
if (n <= 1) return 1;
return n * factorial(n-1);
}
factorial(10)
EOF
# 输出: 3628800
# 计算斐波那契数列
bc << EOF
define fib(n) {
if (n <= 2) return 1;
return fib(n-1) + fib(n-2);
}
fib(10)
EOF
# 输出: 55
五、注意事项
- 默认除法行为:默认情况下,
bc执行整数除法会截断小数部分,需使用scale变量控制小数精度。 - scale 生效范围:
scale只影响除法、取模和幂运算,不影响加减乘。 - 进制设置顺序:进制转换时建议先设置 obase,再设置 ibase,避免因输入进制变化导致 obase 被错误解析。
- 性能问题:极高精度或超大数运算可能较慢,注意性能消耗。
- 退出交互模式:交互式环境中输入
quit或按Ctrl+D即可退出。
Linux 学习资料 https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8

523

被折叠的 条评论
为什么被折叠?



