用途说明
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]#
示例三 进制转换
[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

原文地址

Linux命令之bc - 浮点计算器、进制转换的更多相关文章

  1. Winform——计算器进制转换

    namespace 进制转换2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } p ...

  2. 我使用过的Linux命令之hexdump - ”十六“进制查看器(转载)

    转载:http://codingstandards.iteye.com/blog/805778 本文链接:http://codingstandards.iteye.com/blog/805778   ...

  3. Linux工具之bc计算器进制的转换

    bc是Linux下的命令行式的计算器. 题目虽然叫任意进制,但是因为bc的限制,输入进制是2~16范围:输出进制是2~999范围.这与常见计算器的进制范围是一致的,比如windows计算器最高也只能处 ...

  4. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  5. C#-进制转换、基础语句、语句的总结与练习——★for循环:九九乘法表、三角形、菱形★

    //for循环嵌套练习——打一个九九乘法表 ; i <= ; i++) { ; j <= i; j++) { Console.Write(j + "×" + i + & ...

  6. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. Java基础复习之一篇:关健字,标识符,注释,常量,进制转换,变量,数据类型,数据类型转换

    1.关健字 1.1.被Java语言赋予特定意义的单词(如:class,interface,public ,static) 1.2.全部是小写 1.3.注意事项(goto和const作为关健字保留起来) ...

  8. JavaSE学习(二):进制转换—数据类型转换—Java运算符

    一.进制转换 1.1 其他进制转十进制(以十六进制为例): 十六进制范围:0-9, A-F对应数字10-15 2A7E(16)  =  14*16(0) +7*16(1) + 10*16(2)  + ...

  9. C语言关于进制转换,补码, 整数的位操作

    菜单导航: 1.二进制.八进制.十进制.十六进制的相互转换 2.原码.反码.补码 3.举例证明整数在计算机内是以补码的形式存在(以负数为例) 4.整数的位操作:按位且&.或|.异或^.取反~ ...

随机推荐

  1. 页面元素的定位:getBoundingClientRect()和document.documentElement.scrollTop

    1.document.documentElement.getBoundingClientRect MSDN对此的解释是: Syntax oRect = object.getBoundingClient ...

  2. springcloud关键词解释和基础代码

    原文来自某位大神(不诉薄凉),感觉很好,分享出来. SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么 ...

  3. python 用法测试

    Python 3.5.6 1.js风格的回调测试 def b(): ') def a(fn): if callable(fn): fn() a(b) class Sample: def q(self) ...

  4. WePy--使用zanUI组件

    因为Wepy 中不能直接引入zanUI组件, 好在还有百度, 参考链接 https://github.com/brucx/wepy-zanui-demo (感谢); 我的做法是将 源码下了下来, 源码 ...

  5. 小学生都能学会的python(编码 and 字符串)

    小学生都能学会的python(编码 and 字符串) 一,编码 最早的计算机编码是ASCII. 有英文+数字+特殊字符 8bit => 1byte 没有中文, 后面的编码必须兼容ASCII    ...

  6. Visual Studio 2015 改变窗体图标 & 任意位置打开窗体 & 禁止鼠标改动窗体大小

    1.改变窗体图标 先把图标放到项目文件夹中,然后点击窗体属性的ICON添加即可. 参考:https://www.cnblogs.com/yangxuli/p/8075484.html?tdsource ...

  7. vuejs 基础总结(one)

    vuejs 入门知识点 1.active-class 是哪个组件的属性?嵌套路由怎么定义 (1).active-class 是 vue-router 模块的 router-link 组件的属性 (2) ...

  8. JS 一个简单的隔行变色函数

    //输入要隔行变色的标签名 function setbgColor(tr){ var tr = document.getElementsByTagName("tr"); for(v ...

  9. PatentTips - Sleep state mechanism for virtual multithreading

    BACKGROUND The present disclosure relates generally to information processing systems and, more spec ...

  10. Apache Tez 0.7、0.83、 0.82 安装、调试笔记

    ———————————————————— 准备 Tez 编译环境 ———————————————————— 1 需要的支持 tez0.7 需要 Hadoop 2.60 以上 2 需要的 linux 相 ...