日常用windows电脑时,大多数人都会直接打开系统自带的科学计算器:算小数除法、进制互转、开平方、三角函数,不用安装任何第三方软件,开箱即用。但切换到Linux终端后,很多人就不知道如何计算,掏出手机算数,忽略了linux原生内置同款科学计算器-bc命令。
bc是linux系统预装、零依赖、任意精度的命令行计算器,大部分linux发行版默认自带,查看是否安装可以使用
它既能交互式手动计算,也能嵌入Shell脚本自动化运算,是运维、数据巡检的刚需工具。
bc两个必记参数
1. -q:静默启动,屏蔽bc默认的版权欢迎语,编写脚本必备
2. -l:加载内置标准数学库,支持三角函数、平方根、对数,默认不开启
#遵循数学优先级,先乘除后加减echo "5+3*2" | bc
#括号强制改变优先级echo "(5+3)*2" | bc
<<< 为 Here String传参方式,适合临时计算。备注:bc默认除法为整数截断,不是四舍五入。#例如 echo "10/3"|bc #输出3,而非3.333。
二、浮点小数运算
scale是bc的核心变量,代表保留小数点后位数,是日常使用率最高的功能。绝大多数人只会基础用法,不知道两个隐藏规则。
1. 基础保留小数
#保留2位小数echo "scale=2;10/3" | bc#保留6位小数,磁盘容量换算高频用法echo "scale=6;1000/1024" | bc
2.scale规则的两个注意事项
加减法、乘法不受scale限制:
echo "scale=2;1.23*2.45"|bc#部分旧版本scale仅作用于除法,乘法不会截断,会输出完整3.0135
2.scale只做截断,不四舍五入:10/3保留两位是3.33,不会进位为3.34
三、进制转换:替代计算器手动换算
运维排查内存地址、ip掩码、十六进制日志时,无需打开网页进制转换器,bc一条命令搞定,依靠 ibase(输入进制)、obase(输出进制) 两个变量。
硬性规则:ibase/obase必须写在表达式前面,且数值默认小写,十六进制大写字母无需前缀0x。
1. 十六进制--十进制相互转换
#16进制转10进制:FF转255echo "ibase=16;FF" | bc#10进制转16进制:255转FFecho "obase=16;255" | bc
ibase:指定输入进制,obase 指定输出进制。2. 二进制--十进制(子网掩码换算常用)
#二进制11111111转十进制echo "ibase=2;11111111" | bc
注意:同时修改ibase和obase时,必须先写obase:echo "obase=2;ibase=16;FF"|bc,顺序颠倒会计算错误。
echo "obase=2;ibase=16;FF" | bc
四、内置数学函数
默认bc不开启高级数学函数,添加 -l 参数自动加载数学库,覆盖运维、开发高频数学场景,无需额外工具。
#1.平方根echo "scale=4;sqrt(20)" | bc -l#2.指数运算echo "2^20" | bc#3.正弦函数(弧度)echo "scale=3;s(3.14159/2)" | bc -l#4.自然对数echo "scale=3;l(10)" | bc -l
函数简写对照表(bc 内置)
sqrt(x):平方根s(x):正弦 sin(x)c(x):余弦 cos(x)l(x):自然对数 ln(x)e(x):自然指数 ex
五、shell脚本用法
在巡检服务器cpu、内存、磁盘使用率百分比计算,bash原生无法算小数,bc是最优的选项。
如计算内存使用率:
#!/bin/bash#获取服务器总内存、已用内存total_mem=$(free | awk '/Mem/{print $2}')used_mem=$(free | awk '/Mem/{print $3}')#计算内存使用率,保留2位小数rate=$(echo "scale=2; $used_mem / $total_mem * 100" | bc)#输出结果echo "当前内存使用率:${rate}%"
六、临时交换式用法
在我们日常临时算带宽、流量、存储容量,直接交互式使用,无需每次写echo管道。搭配-q屏蔽冗余提示。
#静默进入交互模式bc -qscale=31500/1024#直接返回1.464,输入quit退出
七:注意事项
小数乘法精度丢失:乘法不受scale控制,需要手动后置截断,例:echo "scale=2;scale=2;1.2*1.5"|bc
进制顺序错误:双进制转换永远先定义obase,再定义ibase
-l参数副作用:加载数学库后scale默认变为20,会输出超长小数,需要手动重设scale
负数运算:bc原生支持负数,无需额外参数,例:echo "5-10"|bc直接返回-5
八、总结
bc并非小众工具,是linux原生轻量化数值计算神器,90%的日常计算场景都能覆盖:
•临时终端算数:管道调用/交互式bc模式
•脚本百分比统计:scale+管道组合
•日志进制换算:ibase/obase
•高精度数学运算:搭配-l参数
后续遇到linux数值计算需求,优先用bc,告别第三方计算器、避免awk冗余代码。如果觉得文章对你有帮助,记得点赞加收藏。
#运维#linux运维#linux计算#bc命令