工具bc : 一个命令行计算器

假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器。例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具。它有着几种不同的操作模式,例如,你可以进行复杂的数学运算或者金融运算。但是,你知道吗,命令行也提供了一个与之相似的名为 bc 的工具?

bc 工具可以为你提供的功能可以满足你对科学计算器、金融计算器或者是简单计算器的期望。另外,假如需要的话,它还可以从命令行中被脚本化。这使得当你需要做复杂的数学运算时,你可以在 shell 脚本中使用它。

因为 bc 也被用于其他的系统软件,例如 CUPS 打印服务,所以它可能已经在你的 Fedora 系统中被安装了。你可以使用下面这个命令来进行检查:


  1. dnf list installed bc 

假如因为某些原因你没有在上面命令的输出中看到它,你可以使用下面的这个命令来安装它:


  1. sudo dnf install bc 

用 bc 做一些简单的数学运算

使用 bc 的一种方式是进入它自己的 shell。在那里你可以按行进行许多次计算。当你键入 bc 后,首先出现的是有关这个程序的警告:


  1. $ bc 
  2. bc 1.06.95 
  3. Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. 
  4. This is free software with ABSOLUTELY NO WARRANTY. 
  5. For details type `warranty'. 

现在你可以按照每行一个输入运算式或者命令了:


  1. 1+1 

bc 会回答上面计算式的答案是:


在这里你还可以执行其他的命令。你可以使用 加(+)、减(-)、乘(*)、除(/)、圆括号、指数符号(^) 等等。请注意 bc 同样也遵循所有约定俗成的运算规则,例如运算的先后顺序。你可以试试下面的例子:


  1. (4+7)*2 
  2. 4+7*2 

若要退出 bc 可以通过按键组合 Ctrl+D 来发送 “输入结束”信号给 bc 。

使用 bc 的另一种方式是使用 echo 命令来传递运算式或命令。下面这个示例就是计算器中的 “Hello, world” 例子,使用 shell 的管道函数(|) 来将 echo 的输出传入 bc 中:


  1. echo '1+1' | bc 

使用 shell 的管道,你可以发送不止一个运算操作,你需要使用分号来分隔不同的运算。结果将在不同的行中返回。


  1. echo '1+1; 2+2' | bc 

精度

在某些计算中,bc 会使用精度的概念,即小数点后面的数字位数。默认的精度是 0。除法操作总是使用精度的设定。所以,如果你没有设置精度,有可能会带来意想不到的答案:


  1. echo '3/2' | bc 
  2. echo 'scale=3; 3/2' | bc 

乘法使用一个更复杂的精度选择机制:


  1. echo '3*2' | bc 
  2. echo '3*2.0' | bc 

同时,加法和减法的相关运算则与之相似:


  1. echo '7-4.15' | bc 

其他进制系统

bc 的另一个有用的功能是可以使用除了十进制以外的其他计数系统。例如,你可以轻松地做十六进制或二进制的数学运算。可以使用 ibase 和 obase 命令来分别设定输入和输出的进制系统。需要记住的是一旦你使用了 ibase,之后你输入的任何数字都将被认为是在新定义的进制系统中。

要做十六进制数到十进制数的转换或运算,你可以使用类似下面的命令。请注意大于 9 的十六进制数必须是大写的(A-F):


  1. echo 'ibase=16; A42F' | bc 
  2. echo 'ibase=16; 5F72+C39B' | bc 

若要使得结果是十六进制数,则需要设定 obase :


  1. echo 'obase=16; ibase=16; 5F72+C39B' | bc 

下面是一个小技巧。假如你在 shell 中做这些十六进制运算,怎样才能使得输入重新为十进制数呢?答案是使用 ibase 命令,但你必须设定它为在当前进制中与十进制中的 10 等价的值。例如,假如 ibase 被设定为十六进制,你需要输入:


  1. ibase=A 

一旦你执行了上面的命令,所有输入的数字都将是十进制的了,接着你便可以输入 obase=10 来重置输出的进制系统。

结论

上面所提到的只是 bc 所能做到的基础。它还允许你为某些复杂的运算和程序定义函数、变量和循环结构。你可以在你的系统中将这些程序保存为文本文件以便你在需要的时候使用。你还可以在网上找到更多的资源,它们提供了更多的例子以及额外的函数库。快乐地计算吧!

作者:Paul W. Frields

来源:51CTO

时间: 2024-12-28 12:36:12

工具bc : 一个命令行计算器的相关文章

bc : 一个命令行计算器

假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它有着几种不同的操作模式,例如,你可以进行复杂的数学运算或者金融运算.但是,你知道吗,命令行也提供了一个与之相似的名为 bc 的工具? bc 工具可以为你提供的功能可以满足你对科学计算器.金融计算器或者是简单计算器的期望.另外,假如需要的话,它还可以从命令行中被脚本化.这使得当你需要做复杂的数学运算时,你可以在 shell 脚本

Aria2一个命令行下运行、多协议、多来源下载工具

Aria2是一个命令行下运行.多协议.多来源http://www.aliyun.com/zixun/aggregation/10481.html">下载工具(HTTP/HTTPS.FTP.BitTorrent.Metalink),内建 XML-RPC 用户界面. Aria2是Linux 下一个不错的高速下载工具.由于它具有分段下载引擎,所以支持从多个地址或者从一个地址的多个连接来下载同一个文件.这样自然就大大加快了文件的下载速度.aria2 也具有断点续传功能,这使你随时能够恢复已经中断的

怎么样称得上是Linux下优秀的命令行计算器

怎么样称得上是Linux下优秀的命令行计算器 每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序.不过如果你的工作区中全是命令行窗口,那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题.或许你在寻找一款基于命令行的计算器程序.如果是这样的话,GNU bc("basic calculator"的缩写)会是你不二的选择.当然Linux下有很多基于命令行的计算器应用,我认为GNU bc是功能最强大和最有用的. 在GNU时代之前,bc实际上是一个著名的精密计算语言.它的

winform-C# Winform 用进度条显示一个命令行命令的进度

问题描述 C# Winform 用进度条显示一个命令行命令的进度 如题,我想用7z.exe来解压ISO镜像文件,因为时间可能会比较长,所以需要一个进度条来显示一下,7z.exe在执行的时候会有一个不断刷新的百分比,(如图). 所以有兄弟知道怎么做这个命令行么?那个不断刷新的百分比应该有点用吧... 解决方案 用Console.Write((char)8); 可以输出退格.这样就可以不断刷新了. 解决方案二: 可以,参考:http://blog.csdn.net/hcj116/article/de

利用搜索引擎实现命令行计算器

//利用搜索引擎实现命令行计算器import java.io.*;import java.net.*;/*** 54powerman* http://54powerman.blog.sohu.com**/public class Cal{ final static String defaultCharset=System.getProperty("file.encoding"); public static void main(String args[]) {  String expr

用C#设计一个命令行方式的文件分割器

命令行|设计 共享软件中有很多界面美观的文件分割程序,将一个大文件分割成几个较小的文件,分别保存,需要的时候再合并成原来的文件,常常是必备的工具. 本文用微软的visual studio .net开发环境的C#语言也来设计一个文件分割器,并且以DOS命令行方式运行,就象使用copy命令一样简单.从中也可以了解文件分割的原理以及.net框架对文件的读写操作方式. 新建一个visual c#项目,选择"控制台应用程序",项目名称设置为filesplitcon,系统自动产生了class1.c

一个命令行(批处理)延迟执行命令的语法_DOS/BAT

1.2003的工具包里有个sleep.exe2.结合vbs实现的代码 复制代码 代码如下: echo.wscript.sleep(2000)>s.vbs cscript //nologo s.vbs del s.vbs dir

linux怎么用一个命令行统计出给定目录中有多少个子目录

ls -l |grep "^-"|wc -l //统计所有文件,包括目录,但不包括子目录里的文件 ls -l |grep "^d"|wc -l //统计目录个数,不包括子目录

命令行工具2

1,自己做的一个命令行工具  执行结果: