基础命令学习目录首页

原文链接:https://www.cnblogs.com/lovevivi/p/4359296.html

最近经常要在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的就不会打印最终返回值,如下

1               define py (y) { print "--->", y, "<---", "0; }
2 define void px (x) { print "--->", x, "<---", "0; }
3 py(1)
4 --->1<---
5 0
6 px(1)
7 --->1<---

还有一些数学库,如s(1), c(1),l(1)等,需要bc -l 在启动时导入数学库,此时默认的scale=20

如输出派 π :echo "4*a(1)" | bc -l    注a(1)表示arctan反正切函数

函数的一个例子:

 1               /* Uses the fact that e^x = (e^(x/2))^2
2 When x is small enough, we use the series:
3 e^x = 1 + x + x^2/2! + x^3/3! + ...
4 */
5
6 define e(x) {
7 auto a, d, e, f, i, m, v, z
8
9 /* Check the sign of x. */
10 if (x<0) {
11 m = 1
12 x = -x
13 }
14
15 /* Precondition x. */
16 z = scale;
17 scale = 4 + z + .44*x;
18 while (x > 1) {
19 f += 1;
20 x /= 2;
21 }
22
23 /* Initialize the variables. */
24 v = 1+x
25 a = x
26 d = 1
27
28 for (i=2; 1; i++) {
29 e = (a *= x) / (d *= i)
30 if (e == 0) {
31 if (f>0) while (f--) v = v*v;
32 scale = z
33 if (m) return (1/v);
34 return (v/1);
35 }
36 v += e
37 }
38 }

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版本:CentOS7.4  64位
这里所有提到的shell都是bash shell,不过推荐你可以学学zsh
Linux Shell进行数值计算的时候,
使用expr,很麻烦,乘号啊什么的还需要转译,
使用美刀符($)加中括号,却只局限于整数计算,
这里介绍一下
Linux的bc命令,它相当于Linux内建的计算器,可以计算整数,也可以进行浮点计算(小数)
你可以叫它bc计算器,也可以叫bash计算器,它就是bash内置的计算器
bc命令的基本用法
你甚至可以把bc称作一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该表达式,最后返回结果。bc计算器能够识别的东东:
数字(整数和浮点数)
变量(简单变量和数组)
注释(以#或C语言中的/* */开始的行)
表达式
编程语句
函数
可以直接在命令行使用bc命令:
[dong@cwd shell]$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
12 * 3.14
37.68
8 * 3.14
25.12
quit
1234567891011
上面是bc计算器的欢迎界面,如果你觉得多余可以使用 -q参数把它去掉
浮点数的小数位数是由内建变量scale控制的。
必须将这个值设置为你希望在计算结果中保留的小数位,
否则无法得到期望的结果
[dong@cwd shell]$ bc -q
3.14 /5
0
scale=4
3.14 / 5
.6280
quit
12345678
scala变量的默认值是0
在scala值被设置之前,bc计算结果不包含小数位。
在将其值设置成4后,bc计算器显示的结果包含4位小数。
-q参数可以不显示bc计算器冗长的欢迎信息。
除了普通数字,bc计算器还能支持变量
[dong@cwd shell]$ bc -q
var1=10
var1 * 4
40
var2 = var1 / 5
print var2
2
println var2
(standard_in) 6: syntax error
quit
1234567891011
变量一旦被定义,就可以在整个bc 计算器会话中使用该变量了,print语句允许你打印变量和数字。
在脚本中使用bc计算器
现在你可能想问bc计算器是如何在shell脚本中帮助处理小数运算的?
可以采用如下的格式在shell脚本中使用bc命令,并将返回结果赋给一个变量。
基本格式如下:
variable=$(echo "options; expression" | bc)
1
第一部分options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开。
expression参数定义了通过bc执行的数学表达式。
OK,下面来个Demo:
[dong@cwd shell]$ vim create_base_script.sh
#!/bin/bash
# 测试在脚本中使用bc命令
# 可以用命令替换运行bc命令,燕将输出赋给一个变量,基本格式如下:
# variable=$(echo "options; expression" | bc)
# 第一部分options允许你设置变量。如果你需要不止一个变量,可以用分号将其分开。
# expression参数定义了通过bc执行的数学表达式。这里有个在脚本中这么做的例子。
var1=$(echo "scale=4; 3.44 /5" | bc)
echo The answer is $var1
12345678910
这个例子将scale变量设置成4位小数,并在expression部分指定了特定的运算。运行这个脚本会产生如下输出:
是不是很神奇啊?
当然除了被赋值,那个变量(var3)也可以用于其他运算了
看下面的例子:
[dong@cwd shell]$ vim create_base_script3.sh
#!/bin/bash
# 在bc命令中测试使用变量
var1=20
var2=3.1415
var3=$(echo "scale=4; $var1 * $var1" | bc)
var4=$(echo "scale=4; $var3 * $var2" | bc)
echo var3 = $var3
echo var4 = $var4
12345678910
代码截图及运行结果如下:
这个方法适用于较短的运算,
但是有时你会涉及更多的数字。
如果需要进行大量运算,在一个命令行中列出多个表达式就会有点麻烦。
·怎!么!办!呢!?
你可以先把Demo敲一遍再看为什么
最好的办法是使用内联输入重定向,
它允许你直接在命令行中重定向数据。
在shell脚本中,你可以将输出赋给一个变量:
variable=$(bc << EOF
options
statements
expressions
EOF
)
EOF
1234567
文本字符串标识了内联重定向数据的起止。
记住,仍然需要将bc命令的输出赋值给变量,
下面来一个例子:
[dong@cwd shell]$ sh create_base_script4.sh 
#!/bin/bash
# 测试bc命令在内联输入重定向下的使用
var1=3.14
var2=2.5
var3=16
var4=2.7
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
a2 = ($var3 * $var4)
a1 + a2
EOF
)
echo var5 = $var5
1234567891011121314151617
代码截图
输出结果如下:
EOF字符串标识了重定向给bc命令的数据的起止。
当然,必须用美刀符$(xxx)来标识出用来给变量赋值的命令。
---------------------
作者:荒野独行
来源:CSDN
原文:https://blog.csdn.net/daerzei/article/details/80341339
版权声明:本文为博主原创文章,转载请附上博文链接!
 
 
一: bc 的基本使用1. 基本运算符运算符与平时所用的 + - * / % 一样,其中指数运算使用 ^ 运算符。2. 进入 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'.3+5856*78436856^4983449654%54
3. 退出 bc 解释环境
按Ctrl+D 或者 输入quit 退出 bc 命令
quit
4. 通过管道使用 bc 命令
将所要计算的 通过echo命令传递给bc,如果有多条要执行的,则通过 ; 隔绝开。
#echo "5+3" | bc8#echo "6*5;32/2" | bc3016
5. 其他
如果希望进入 bc 时候没有前面一大段提示可以开始的时候加入 -q。
#bc -q
二: 使用 bc 进行浮点数运算,进制转换
1. 浮点运算 -- scale
通过设定 scale 这个变量,可以控制除法,乘幂,取余结果的小数点精度值。scale默认为0,通过输入scale可以看出当前的值。
scale
03/40scale=13/4.72/3.6
2. 进制转换 -- ibase obase
ibase,obase 显而易见一个是输入进制,一个是输出进制。默认都是十进制。其中ibase为16的时候,ABCDF必须要大写,否则无效。
ibase=16ffff0FFFF65535
其他组合功能自己发挥啦。
---------------------
作者:sinat_24543051
来源:CSDN
原文:https://blog.csdn.net/sinat_24543051/article/details/67636778
版权声明:本文为博主原创文章,转载请附上博文链接!
 
 
原文链接:https://blog.csdn.net/sinat_24543051/article/details/67636778
bc 命令是任意精度计算器语言,通常在linux下当计算器用。

它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

常用的运算:
+ 加法
- 减法
* 乘法
/ 除法
^ 指数
% 余数

语法
bc(选项)(参数)

选项值
-i:强制进入交互式模式;
-l:定义使用的标准数学库
; -w:对POSIX bc的扩展给出警告信息;
-q:不打印正常的GNU bc环境信息;
-v:显示指令版本信息;
-h:显示指令的帮助信息。

参数

文件:指定包含计算任务的文件。

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

输入 quit 退出。

通过管道符

$ echo "15+5" | bc
20

scale=2 设小数位,2 代表保留两位:
$ echo 'scale=2; (2.777 - 1.4744)/1' | bc
1.30

bc 除了 scale 来设定小数位之外,还有 ibase 和 obase 来其它进制的运算:
$ echo "ibase=2;111" |bc
7

进制转换
#!/bin/bash

abc=192 
echo "obase=2;$abc" | bc
<pre>
<p>
执行结果为:11000000,这是用bc将十进制转换成二进制。</p>

<pre>
#!/bin/bash

abc=11000000 
echo "obase=10;ibase=2;$abc" | bc

执行结果为:192,这是用bc将二进制转换为十进制。

计算平方和平方根: 
$ echo "10^10" | bc 
10000000000
$ echo "sqrt(100)" | bc
10

bc命令详解的更多相关文章

  1. bc命令详解与实例

    bc: bc 是一种高精度的可交互执行的计算机语言.它在一些浮点数的运算中应用广泛. 一般情况下我们直接输入 bc ,便可进入其工作环境.当然,它还有其他的参数 -h 显示帮助信息并退出 -i 强制进 ...

  2. sed命令详解 vim高级技巧 shell编程上

    第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...

  3. Linux就业技术指导(五):Linux运维核心管理命令详解

    一,Linux核心进程管理命令 1.1 ps:查看进程 1.1.1 命令解释 功能说明 ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片.如果想要动态地显示进程,就需要使 ...

  4. [SHELL]:let 命令详解

    [SHELL]:let 命令详解 摘自:https://blog.csdn.net/happygongzhuo/article/details/6819099 let :简单的计算器  语 法let[ ...

  5. 云计算:Linux运维核心管理命令详解

    云计算:Linux运维核心管理命令详解 想做好运维工作,人先要学会勤快: 居安而思危,勤记而补拙,方可不断提高: 别人资料不论你用着再如何爽那也是别人的: 自己总结东西是你自身特有的一种思想与理念的展 ...

  6. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  7. linux yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RP ...

  8. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  9. Docker命令详解

    Docker命令详解   最近学习Docker,将docker所有命令实验了一番,特整理如下: # docker --help Usage: docker [OPTIONS] COMMAND [arg ...

随机推荐

  1. 微信小程序、安卓APP、苹果APP对比分析

    今天的话题主要是关于微信小程序.安卓APP.苹果APP对比分析.既然是对比分析肯定是将它们一个一个说明. 本篇不涉及技术话题,只讲解微信小程序.安卓APP.苹果APP它们各自的优缺点及其应用场景. 一 ...

  2. js对LocalDateTime时间的格式化成yyyy-MM-dd HH:mm:ss

    formatter: function(value,row,index){ var arr = value; if(arr==null || arr==""){ return &q ...

  3. 关于html5 audio 标签在ios系统上不能正常自动播放的解决办法

    由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio, 因此我们通过一个用户交互事件来主动 play 一下 audio. ...

  4. P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...

  5. CentOS 7中为Yum设置代理

    公司给的Linux机器,默认没给联网,然后安装Docker时流程走不下去,找IT半天没人回,然后我就自己折腾,各种配置系统代理,结果并没有成功,最后发现yum可以单独为yum设置代理,方式如下: YU ...

  6. Animate.css介绍

    Animate.css简介 animate.css 动画库,预设了抖动(shake).闪烁(flash).弹跳(bounce).翻转(flip).旋转(rotateIn/rotateOut).淡入淡出 ...

  7. c++类模板之友元函数

    前言:自从开始学模板了后,小编在练习的过程中.常常一编译之后出现几十个错误,而且还是那种看都看不懂那种(此刻只想一句MMP).于是写了便写了类模板友元函数的用法这篇博客.来记录一下自己的学习. 普通友 ...

  8. SMARTFORMS关闭失败

    用户要调整表单样式,结果调整完发现打印时报错. 检查表单后发现,是因为用户要求删除表单中的一个单元格,但是删除TEMPLATE中的一个格子后,忘了调整后续单元格内容输出的位置.导致输出错误.

  9. 通过脚手架创建Vue项目

    第一步 准备工作 1.下载安装Node.js 验证是否安装的方法,在命令行输入node -v 2.安装Vue 在命令行输入npm install -g @vue/cli 查看Vue版本号 npm vu ...

  10. C#调整图片亮度和对比度

    BitmapSource bitmap = null; ; ; private void SetBrightness(int degree) { degree = degree * / ; Write ...