【原创】linux命令bc使用详解
最近经常要在linux下做一些进制转换,看到了可以使用bc命令,如下:
echo "obase=10;ibase=16;CFFF" | bc
用完以后就对bc进行了进一步的了解, man bc里面有详细的使用说明。
1.是什么,怎么用
bc - An arbitrary precision calculator language 一个任意精度的计算器语言。
从他的使用上来看,能够对计算公式的语法进行解释并返回出结果。有下面几种使用方式:
1).交互式
输入bc,进入交互式界面,然后输入3+1,回车后在下一行打印出了4
2).echo+管道
echo "3+1" | bc 返回4到屏幕上
3).bc + 文件名
bc "calc.txt" 进入bc交互式界面并自动返回文本内算式的结果
当算术或者语法等出现错误时,程序会返回错误信息,如下:
1/0
Runtime error (func=(main), adr=3): Divide by zero
2.选项
--help -h 显示选项页
--interactive -i 使用交互模式
--mathlib -l 执行指定语句前,先加载math函数库
--warn -w 对非POSIX的bc指令给出警告
--standard -s 启动POSIX模式下的bc程序
--quiet -q 不显示GNU bc 的欢迎
--version -v 显示版本信息
3.数字、变量、表达式和注释
3.1数字
操作基本都是围绕数字,默认的输出输入进制都是十进制。数字有2个属性 长度(length)和小数点后精度(scale), length值数字有效数字的长度,scale是值小数点后的长度。
如:0.001 length=3 scale=3
45.78 length=4 scale=2
关于数字,当使用十六进制时,英文ABCDEF必须大写,大于16进制的则都用XX的十进制数字代表一位,如C=12
3.2 变量
计算表达式的时候可以用变量,变量名为小写字母开头后面可以跟_,1,a。
变量分两种:
普通变量: a=4;a 返回4
数组变量: a[1]=1;a[3]=3;a[1];a[2];a[3] 返回1 0 3
另外有4个特殊的变量,他们有着特殊的意义,不能当做普通变量用,如下:
1)scale=10; 设置之后的scale为10,默认为0(及整数除法会返回整数)
2)obase=16;ibase=16; 设置输入和输出都为16进制,默认值为10
注意:为10时可不设置ibase obase的值,obase要尽量放在ibase前,因为ibase设置后,后面的数字都是以ibase的进制来换算的
3)last,是指上一次返回出来的数字
3.3 表达式
表达式跟C语言的都类似,主要就是
1)运算类 + - * / % ++ -- ^等
2)赋值类 = +=
3)关系类 > <= 其中true则返回1,false返回0
4)布尔类 && || 同上
注: a = 3 < 5 ,C语言中a=false,而bc中a=3,然后返回3<5的结果1 故一般带赋值的算式后面尽量都要加括号来确保执行顺序
几个特殊的表达式:
length(3.5) 取length
scale(3.5) 取scale
sqrt(9) 取根号
read() 从标准输入读
3.4 注释
注释有两种:
1)多行注释 /* */
2)单行注释#
4. 语句(statement) 和 函数
4.1语句
1+1
2+2
等价于1+1;2+2,都会返回两行 2 4 。
但是给变量赋值是不会输出值得,故1+1;2+2;a=3;b=4 还是返回两行2 4。
故:分隔符是 分号或者回车,纯赋值不会产生输出,表达式会以obase进制输出到标准输出
a=1 无输出 (a=1)会输出1,因为()是表达式
1)输出可以用print, 如print a,b,c,d
2)可使用字符串 "abc\n"
3)其他的话跟C类似 if for while return break continue {}
4.2 函数
define [可选void] 函数名(参数列表[如:a, b, array[]]) {
auto m,n,l;
.... return 45;
}
auto 声明的是局部变量,数组参数用array[]表示,返回值写了void的就不会打印最终返回值,如下
define py (y) { print "--->", y, "<---", "0; }
define void px (x) { print "--->", x, "<---", "0; }
py()
---><--- px()
---><---
还有一些数学库,如s(1), c(1),l(1)等,需要bc -l 在启动时导入数学库,此时默认的scale=20
如输出派 π :echo "4*a(1)" | bc -l 注a(1)表示arctan反正切函数
函数的一个例子:
/* Uses the fact that e^x = (e^(x/2))^2
When x is small enough, we use the series:
e^x = 1 + x + x^2/2! + x^3/3! + ...
*/ define e(x) {
auto a, d, e, f, i, m, v, z /* Check the sign of x. */
if (x<) {
m =
x = -x
} /* Precondition x. */
z = scale;
scale = + z + .*x;
while (x > ) {
f += ;
x /= ;
} /* Initialize the variables. */
v = +x
a = x
d = for (i=; ; i++) {
e = (a *= x) / (d *= i)
if (e == ) {
if (f>) while (f--) v = v*v;
scale = z
if (m) return (/v);
return (v/);
}
v += e
}
}
5.其他
man bc最后还介绍了一下全局limits,环境变量,版本对比等,这里不累述,有兴趣直接里面看吧。
6.其他一些计算命令
1)dc 指令复杂些,更像是老式计算器
2)expr 如expr 3 + 4 主要是后面每个数字符号之间都得加空格
3)echo 如echo $((3+4)) echo $((16#CC)) 主要是多加()让他产生计算的意义
4)awk 如'BEGIN{a=3+2;print a}'
小结:
bc是一个较为完整,提供了完备的类似C的编程语法的计算器,可以在交互式界面、文本或管道的方式方便的进行一些逻辑运算。支持多进制转换,任意精度调整,打印控制,函数支持,逻辑控制等。有疑惑的地方直接man bc即可有详细的解释。
【原创】linux命令bc使用详解的更多相关文章
- Linux命令工具 top详解
Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...
- 每周一个linux命令之---uptime详解
每周一个linux命令之---uptime详解 linux命令 uptime详解 引言:从今天开始,每周更新一个对程序员有用的linux命令,我真的没敢写每天一个,我怕我坚持不下去,每周一个还是可以的 ...
- 【linux】linux命令grep + awk 详解
linux命令grep + awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...
- linux命令配置IP详解
在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,有时需要编辑这些文件来完成联网工作. vi /etc/sysconfig/network-scripts/ifcfg-eth0 :进 ...
- Linux命令ip addr详解
熟悉Linux操作系统的同学对于ip addr命令应该不陌生,知道它是用来查看本地IP地址的,除了IP地址,其它额外的信息有必要了解一下. root@test:~# ip addr1: lo: < ...
- linux命令之crontab详解
crontab命令: crontab -l : 显示定时任务列表 crontab -e: 编辑定时任务 crontab -r : 删除所有定时任务 基本格式 : * * * * * command ...
- linux命令-tar工具详解
把文件和目录打成一个包 文件打包 [root@wangshaojun ~]# tar -cvf 1.tar 1.txt 123 234 ///-c创建 -v可视化 -f file放最后面1.txt12 ...
- linux命令之——grep详解
grep命令用于查找文件里符合条件的字符串:也可以用于查找内容包含指定的范本样式的文件.它能使用正则表达式搜索,用于在文件中搜索指定的字符串模式,列出含有匹配模式子符串的文件名,并输出含有该字符串的文 ...
- linux命令-yum工具详解
yum比rpm的优势在于解决依赖关系.可以指定源. [root@wangshaojun ~]# yum list ////列出rpm包资源 网络资源 rrdtool-php. x86_64 ...
随机推荐
- hdu 4190
二分求箱子中的票数 然后判是否满足条件 主要为了纪念一下用优先队列9000ms水过 #include<cstdio> #include<climits> #inclu ...
- Unity寻路的功能总结
源地址:http://blog.csdn.net/sgnyyy/article/details/21878163 1. 利用Unity本身自带的NavMesh 这篇文章已经比较详细,可能对于很多需要a ...
- windows8 64位 IIS8 PHP5.5 安装 Imagemagick 组件
为什么这里一定要说 windows 系统是64位呢,因为如果是系统是64位,那么PHP5.5 一般都会选择64的, Imagemagick 组件也会选择64位的, 但是操蛋的是 64位的Imagema ...
- AppStore 沙箱环境的测试流程
1:请确保你打得版本是 沙箱环境的版本 2:请确保的手机序列号已经加入沙箱环境3:请确保你的手机Apple ID 账户已经退出 ------ 如果这些都准备好了,再进行测试吧,不然一堆的未知问题等着你 ...
- H264/AVC视频解码时AVC1和H264的区别
AVC1与H264的区别 http://blog.csdn.net/qiuchangyong/article/details/6660253 H.264 Video Types The followi ...
- redis面试
1. 使用Redis有哪些好处? (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) (2) 支持丰富数据类型,支持string,li ...
- Hadoop常用命令汇总
启动Hadoop 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 关闭Hadoop 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh 1.查看指 ...
- C++中的namespace用法
关键字namespace定义了一个名字空间,里面的变量和函数,声明在此名字空间外使用须在前面加名字空间名称.例如: #include<iostream.h>namespace my{ in ...
- 推荐五款优秀的PHP代码重构工具
在软件工程学里,重构代码一词通常是指在不改变代码的外部行为情况下而修改源代码.软件重构需要借助工具完成,而重构工具能够修改代码同时修改所有引用该代码的地方.本文收集了五款出色的PHP代码重构工具,以帮 ...
- mongoDB入门必读
一.概述 MongoDB是一个基于分布式文件存储的数据库开源项目. 由C++语言编写,旨在为WEB应用提供可护展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品. ...