【用途说明】

Bash内置了对整数四则运算的支持,但是并不支持浮点运算,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下。手册页上说bc是An arbitrary precision calculator language,即一个任意精度的计算语言,注意是一种语言,它提供了一些语法结构,比如条件判断、循环等,可以说是很强大的,但是我在实际中还没有找到需要这个用途的场合
。另外一个用途就是用来进行进制转换。

【常用参数】

一般情况下,我们使用不带任何参数的bc命令:

bc

如果需要bc不输出提示信息,可以加上-q参数:

bc -q

如果要使用强大的数学库,比如计算三角函数,需要加上-l参数:

bc -l

因为bc本身是一个命令解释器,要退出它只要直接输入quit回车或者按Ctrl+D终止。

【使用示例】

示例一 命令行方式使用bc

[root@localhost centos39]# bc

bc 1.06

Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

3+4

7

3-4

-1

3*4

12

3/4

0

scale=2;3/4      # 保留小数点精度只对除法、取余、乘幂有效

.75

3/4

.75

3%4

0

scale=0

3%4

3

3^4

81

Ctrl+D

[root@localhost centos39]#

示例二
通过管道使用bc来计算


[root@localhost centos39]# echo 3 * 4 | bc

(standard_in) 1: parse error

[root@localhost centos39]# echo "3 * 4" | bc

12

[root@localhost centos39]# echo "scale=7; 355/113" | bc

3.1415929

[root@localhost centos39]#

这种方式下还可以用于浮点数据类型的大小比较:

a=1.2

b=3.2

c=`echo "$a < $b" | bc`

echo "$c"

以上脚本执行结果是1,而如果比较的结果是不满足的(比如将上面的$a < $b改为$a
> $b),输出结果就是0。

注意:这里一定一定要注意的是,这个比较结果就是0或1,而不是代表true或false,因而不能用于if后的条件判断!切记切记!

示例三 进制转换

[root@rhel55 ~]# echo "ibase=16; FFFF" | bc

65535

[root@rhel55 ~]# echo "obase=16; 1000" | bc

3E8

[root@rhel55 ~]#

 

 

我们用到bc的ibase和obase方法。

 

  ibase是输入数字的进制,而obase就是输出数字的进制了。很好记,i是input,o是output。

 

  如果用一条命令来转数字,可以用echo命令和管道结合bc。如下:

 

  10进制转2进制:

 

  $ echo "obase=2;ibase=10;100" | bc1100100

 

  10进制转16进制:

 

  $ echo "obase=16;ibase=10;100" | bc64

 

  16进制转10进制:

 

  $ echo "ibase=16;obase=2;F1" | bc11110001

 

  注意,16进制数字的F要大写,如果小写结果是不对的。像最上面没有指定的时候,默认是10进制。

示例四 将多个表达式写在一个文件中一起计算

[root@rhel55 ~]# cat test.bc

123*321

123/321

scale=4;123/321

 

[root@rhel55 ~]# bc test.bc

bc 1.06

Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

39483

0

.3831

Ctrl+D

[root@rhel55 ~]#

[root@rhel55 ~]# cat test.bc | bc

39483

0

.3831

[root@rhel55 ~]#

示例五 一个计算三角形面积的Bash脚本

先复习一下初中的知识:b表示三角形的底,h表示三角形的高,那么三角形的面积计算公式是b*h/2 。

 

文件 :area_of_triangle.sh

Bash代码 

#!/bin/bash 

  

# Shell program/script to read the base and height of a traingle and find its area 

# ------------------------------------------------------------------------- 

# Copyright (c) 2005 nixCraft project <http://cyberciti.biz/fb/> 

# This script is licensed under GNU GPL version 2.0 or above 

# ------------------------------------------------------------------------- 

# This script is part of nixCraft shell script collection (NSSC) 

# Visit http://bash.cyberciti.biz/ for more information. 

# ------------------------------------------------------------------------- 

# Formula info: http://www.mste.uiuc.edu/dildine/heron/triarea.html 

# Area=(1/2) x Base x Height 

 

echo -n "Enter base of a triangle : " 

read b 

 

echo -n "Enter height of a triangle : " 

read h 

 

# calculate it and display back 

area=$(echo "scale=2;(1/2) * $b * $h"|bc) 

echo "Area of a triangle is $area" 

  

 

[root@smsgw academic]# ./area_of_triangle.sh

Enter base of a triangle : 123

Enter height of a triangle : 321

Area of a triangle is 19741.50

[root@smsgw academic]#

 示例六 使用bc命令的脚本片段

Bash代码 

# usage: calc_sum <num1> <num2> 

# 计算两个数的和 

calc_sum() 



bc -q <<EOF 

$1+$2 

EOF 



 

# usage: calc_free <count> 

# 计算费用,单价0.05元 

calc_fee() 



bc -q <<EOF 

0.05*$1 

EOF 



   

 

将以上代码粘贴到终端。

[root@web ~]# # usage: calc_sum <num1> <num2>

[root@web ~]# # 计算两个数的和

[root@web ~]# calc_sum()

> {

> bc -q <<EOF

> $1+$2

> EOF

> }

[root@web ~]#

[root@web ~]# # usage: calc_free <count>

[root@web ~]# # 计算费用,单价0.05元

[root@web ~]# calc_fee()

> {

> bc -q <<EOF

> 0.05*$1

> EOF

> }

[root@web ~]#

[root@web ~]#

[root@web ~]# calc_sum 123 321

444

[root@web ~]# calc_fee 1000

50.00

[root@web ~]#

示例七 使用数学库

有文章称可以计算100位的圆周率pi值。

[root@web ~]# echo "scale=100; a(1)*4" | bc

Runtime error (func=(main), adr=11): Function a not defined.

[root@web ~]# echo "scale=100; a(1)*4" | bc -l

3.141592653589793238462643383279502884197169399375105820974944592307\

8164062862089986280348253421170676

[root@web ~]#

LINUX任意精度计算器BC用法的更多相关文章

  1. 任意精度计算器 bc (arbitrary precision calculator)

    2019/06/18 bc 学习之 https://www.runoob.com/linux/linux-comm-bc.html

  2. Linux下的计算器(bc、expr、dc、echo、awk)知多少?

    linux 其他知识目录 原文链接:http://blog.chinaunix.net/uid-24673811-id-1760837.html linux下的三个命令可以用来作计算,下面一一讲解用法 ...

  3. 【转载】linux命令行计算器bc的一个“坑”

    [转载自]http://blog.chinaunix.net/uid-174325-id-3518953.html 结论:ibase,obase可以使用在不同的计算公式里,但是尽量把obase放iba ...

  4. centos7 shell 计算器 bc 命令

    2021-08-03 1. 安装 yum -y install bc 2. 简介 bc 命令是任意精度计算器语言,通常在 linux 下当计算器使用 类似基本的计算器, 使用这个计算器可以做基本的数学 ...

  5. 《linux下的计算器:bc用法入门篇》

    说起电脑上的计算器,可能所有人的印象都是这样的:

  6. Linux下的简单好用的计算器bc

    1. 关于bc bc是随意精度计算器语言,通常在linux下当计算器用,简单好用.相当于windows下的计算器. 2. 支持的运算符 主要的数学运算: + 加法 - 减法 * 乘法 / 除法 ^ 指 ...

  7. Linux shell 整数运算 let [ ] (( )) expr以及 浮点数 bc用法(转)

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算:2)Linux shell 中使用 expr 与 b ...

  8. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  9. 分享一个命令行计算器-bc

    分享一个命令行计算器-bc 假如你在一个图形桌面环境中需要一个计算器时,你可能只需要一路进行点击便可以找到一个计算器.例如,Fedora 工作站中就已经包含了一个名为 Calculator 的工具.它 ...

随机推荐

  1. CSS 浮动 float 属性

    浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. 请看下图,当把框 1 向右浮动时,它 ...

  2. redis复制集

    应用场景:复制集作用的场景问题: 1.解决单点故障 2.读写分离 1.准备两台redis服务器 a) 一台做为注服务器,一台做为从服务器 b) 在从服务器中的redis.conf文件中添加 repli ...

  3. 【转】C++ 资源大全中文版

    转自:http://www.cnblogs.com/liuliu-NoGirl/p/5802765.html  感谢作者发布这么东西 我想很多程序员应该记得 GitHub 上有一个 Awesome – ...

  4. 阶段3 3.SpringMVC·_06.异常处理及拦截器_5 SpringMVC拦截器之编写controller

    先新建包,com.itcast.controller,然后把异常拦截的项目的UserController复制过来. 复制过来稍作修改 创建pages文件件,然后新建success.jsp页面 部署当前 ...

  5. spring boot系列(五)spring boot 配置spring data jpa (查询方法)

    接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...

  6. EUREKA 删除 or 强制下线/上线 实例

    开发环境,EUREKA 注册中心 某服务被注册了多个实例,feign 调用时 服务请求到其他实例上,请求收不到,使用一下命令删除 或者强制下线实例: 1 .DELETE  删除注册实例,但是如果被删除 ...

  7. jdk1.8-ArrayList源码分析

    一:idea可以自动生成UML类图,ctrl+alt+u ArrayList类图 我没们看下类的继承关系 ) { ) { ) { )) )) newCapacity = minCapacity) ne ...

  8. 利用nginx做反向代理解决前端跨域问题

    最近朋友再群里提了一个问题,他们公司给他提供了一个获取数据的接口,在浏览器访问这个接口能获取到json数据,但是放在项目里使用ajax就产生了跨域问题,一般这个需要提供接口的后台方面需要做跨域处理,但 ...

  9. Unity中的动画系统和Timeline(1) 普通动画创建

    学习使用版本:Unity2017.1.1 目标:给一个Cube创建动画 一:第一种创建方法 1 Windows —— Animation,打开Aniamtion动画界面,此时显示 因为此时没有任何动画 ...

  10. 通过java 来实现对多个文件的内容合并到一个文件中

    现在有多个txt文本文件,需要把这么多个文件的内容都放到一个文件中去 以下是实现代码 package com.SBgong.test; import java.io.*; public class F ...