Linux系统之bc命令详解

bc(Basic Calculator)是一个在类 Unix 系统中常用的任意精度计算器语言。它不仅能够执行简单的数学运算,还支持变量、数组、用户自定义函数以及基本的编程结构如条件语句和循环。这使得bc不仅可以作为一个命令行计算器使用,还可以编写复杂的数学计算脚本。

1. 基本语法
bc [选项]... [文件...]
2. 核心功能与选项
2.1 常用选项
选项 功能 适用场景
-l, --mathlib 加载标准数学库(提供 sqrtsincos 等函数)。 需要高级数学运算时。
-q, --quiet 禁用启动时的欢迎信息。 需要静默执行脚本时。
-v, --version 显示版本信息并退出。 需要确认工具版本时。
-i, --interactive 强制进入交互模式。 需要交互式计算时。
-w, --warn 警告非 POSIX 扩展的语法。 检查代码兼容性时。
-s, --standard 严格遵循 POSIX 标准,禁用扩展功能。 需要符合 POSIX 标准时。
3. 数字与变量
3.1 数字类型
  • 任意精度:支持整数、浮点数,精度由 scale 变量控制。
  • 进制转换
    • ibase=N:设置输入基数(2~16)。
    • obase=N:设置输出基数(2~任意)。
    • 示例
      # 十进制转二进制
      obase=2; ibase=10; 192
      # 输出:11000000
      
3.2 变量与特殊变量
  • 简单变量var = expression
  • 数组变量array[expr] = expression
  • 特殊变量
    • scale:控制运算精度(默认 0)。
    • ibase:输入基数(默认 10)。
    • obase:输出基数(默认 10)。
    • last:保存上一次输出的结果(扩展功能)。
4. 表达式与运算符
4.1 算术运算符
运算符 说明
+, -, *, / 加、减、乘、除。
% 取余(结果与被除数符号一致)。
^ 幂运算(指数必须为整数)。
() 改变运算优先级。
4.2 关系与布尔运算
  • 关系运算符<, <=, >, >=, ==, !=,结果为 0(假)或 1(真)。
  • 布尔运算符(扩展功能):
    • !expr:逻辑非。
    • expr && expr:逻辑与。
    • expr || expr:逻辑或。
4.3 赋值运算符
  • var = expr:直接赋值。
  • var op= expr:复合赋值(如 +=, *= 等)。
5. 控制结构
5.1 条件语句
if (条件表达式) {
    语句1;
} else {
    语句2;
}
5.2 循环语句
  • for 循环
    for (初始化; 条件; 迭代) {
        语句;
    }
    
  • while 循环
    while (条件) {
        语句;
    }
    
  • break/continue:终止或跳过当前循环。
5.3 函数定义
define function_name(parameters) {
    语句;
    return 返回值;
}
  • 示例:计算阶乘:
    define factorial(n) {
        if (n <= 1) return 1;
        return n * factorial(n-1);
    }
    
6. 数学库(需 -l 选项)

加载数学库后,可用以下函数:

函数 说明 示例
sqrt(x) 平方根 sqrt(9)3
length(x) 数字长度(十进制位数) length(123)3
scale(x) 小数位数 scale(1.23)2
s(x) 正弦(x 为弧度) s(0)0
c(x) 余弦 c(0)1
e(x) 指数函数(e^x) e(1)2.71828...
7. 输入输出与文件
  • 从文件读取bc script.bc
  • 标准输入交互:直接输入表达式后按回车执行。
  • 管道使用:在脚本中结合 echo 或其他命令:
    echo "scale=2; 1/3" | bc  # 输出 `0.33`
    
8. 示例
8.1 基本计算
# 基础算术操作
echo "3 + 2" | bc
# 输出:5

# 变量与表达式
echo "a=5; b=3; a*b" | bc
# 输出:15

# 浮点运算,scale 指定了结果中小数点后的位数
echo "scale=2; 10 / 3" | bc -l
# 输出:3.33

# 计算圆周率(保留10位小数)
echo "scale=10; 4*a(1)" | bc -l
# 输出:3.1415926532

# 快速计算贷款月供
echo "scale=2; r=5/1200; p=300000; n=360; p*r*(1+r)^n/((1+r)^n-1)" | bc -l
# 输出:1610.46
# 交互模式
$ bc
bc 1.07
...
print 3 + 5 * 2
13

# 浮点计算
scale=2; 10 / 3
3.33
8.2 进制转换
# 十进制转十六进制
echo "obase=16; 255" | bc
# 输出:FF

# 二进制转十进制
echo "ibase=2; 1010" | bc
输出:10

# 八进制转二进制
echo "obase=2; ibase=8; 37" | bc
输出:11111
8.3 使用数学库
# 计算平方根
$ bc -l
sqrt(2)
1.41421356237309504880

# 计算 sin(π/2)(弧度)
s(4*a(1))  # a(1) 是 arctan(1)=π/4
1.0

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值