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

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

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

dnf list installed bc

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

sudo dnf install bc

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

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

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

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

1+1

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

2

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

(4+7)*24+7*2

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

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

echo '1+1' | bc

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

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

 

精度

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

echo '3/2' | bcecho 'scale=3; 3/2' | bc

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

echo '3*2' | bcecho '3*2.0' | bc

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

echo '7-4.15' | bc

其他进制系统

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

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

echo 'ibase=16; A42F' | bcecho 'ibase=16; 5F72+C39B' | bc

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

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

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

ibase=A

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

结论

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

Linux中的一个命令行计算器bc简介相关推荐

  1. linux一条命令添加用户并设置密码,linux中如何通过命令行来添加用户并设置密码...

    linux中如何通过命令行来添加用户并设置密码 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.90 积分 LINUX中如何通过命令行来添加用户 ...

  2. linux中mysql客户端命令行连接不了 docker 创建的mysql

    linux中mysql客户端命令行连接不了 docker 创建的mysql 问题 :如题 a@z:~$ mysql -h localhost -p ERROR 2002 (HY000): Can't ...

  3. c语言编写天气预报程序,在Deno中构建一个命令行天气预报程序

    在本文中,我将通过安装Deno运行时,并创建一个命令行天气程序,该程序将把一个城市名称作为参数,并返回未来24小时的天气预报. 要为Deno编写代码,我强烈建议将Visual Studio Code与 ...

  4. Linux中如何通过命令行访问Dropbox

    在当今这个多设备的环境下,云存储无处不在.无论身处何方,人们都想通过多种设备来从云存储中获取所需的内容.由于拥有漂亮的 UI 和完美的跨平台兼容性,Dropbox 已成为最为广泛使用的云存储服务. D ...

  5. python模拟器 截图_在Linux中20个命令行终端模拟器截图对比

    终端模拟器是在一些其它显示结构内再现视频终端的计算机程序.换句话说,终端模拟器有能力使一个愚蠢的机器看起来像一个网络连接到服务器的客户端计算机.终端模拟器允许最终用户访问控制台及其应用程序,如文本用户 ...

  6. 显示器 Linux 性能 18 (一个命令行工具传递)

    对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一名Linux系统的管理员工作5年后,我逐渐认识到监控和保持系统启动并执行是多么的不easy.基于此原因. ...

  7. linux 查找py文件命令_在 Linux 中如何从命令行查找 VirtualBox 版本

    如果你想知道如何在 Linux 中从命令行查找 VirtualBox 版本,可以采用以下几种方法. -- Sk(作者) 我使用 Oracle VirtualBox 和 KVM 虚拟化程序 测试不同的 ...

  8. linux中如何自定义命令行,linux终端颜色和命令行自定义

    1.命令行格式 用户名@主机名:当前路径$ 设置 echo "PS1='${debian_chroot:+($debian_chroot)}\[\033[01;04;32m\]\u\[\03 ...

  9. 在 Linux 中使用ImageMagick命令行操作图像文件

    使用 convert 命令,可以无需打开图像编辑器进行修改图像文件.convert命令包含在ImageMagick安装包里. Centos8安装ImageMagick ImageMagick 可以安装 ...

最新文章

  1. prism项目搭建 wpf_WPF Step By Step 系列-Prism框架在项目中使用
  2. linux %3e%3e 重定向,当我访问HTTPS时,网站保持重定向到HTTP,无明显原因
  3. InnoDB中一棵B+树能存多少行数据
  4. java实体类属性非空判断工具类
  5. 解决ipfs 出现Error: can‘t publish while offline: pass `--allow-offline` to override的问题
  6. 多线程操作时操作系统时间片_从零开始自制操作系统(15):内核多线程
  7. 涡轮机叶片matlab强度分析论文,一种基于MATLAB及Pro_E的涡轮建模方法
  8. [Ext JS 4] 实战之Chart 坐标控制(单坐标,双坐标)
  9. 服务器组件架构,tomcat组件图解 一个web服务器的架构演化史
  10. 从零基础入门Tensorflow2.0 ----八、42. 自定义流程
  11. python卡方拟合优度检验_如何理解拟合优度检验 ?
  12. 程序员的精确思维,左手数学右手编程
  13. TestNG跳过某个测试方法
  14. ps中如何批量修改图片
  15. Ubuntu 22.04 LTS 现在可供下载
  16. 对标金九银十:各大厂最新Java面试真题整理+简历模板
  17. PMP证书容易考吗?
  18. java快速生成数据库文档
  19. “Microsoft Office Professional Plus 2010在安装中出错”解决办法
  20. Android双系统之基本问题研究

热门文章

  1. mstsc /console 远程命令
  2. Android事件处理机制
  3. onnx模型推理(python)
  4. C/C++语言宏定义##连接符和符#的使用
  5. 2016年腾讯产品笔试真题
  6. Java并发编程—锁的基本概念
  7. java中try-catch另外一种用法:try(){}语法使用
  8. eclipse 保存html 提示 save could not be completed
  9. leveldb 学习记录(四)Log文件
  10. android四个组件的跨进程通信