Chinaunix首页 | 论坛 | 博客
  • 博客访问: 828810
  • 博文数量: 157
  • 博客积分: 542
  • 博客等级: 中士
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-21 20:21
文章分类
文章存档

2017年(1)

2016年(2)

2015年(6)

2014年(42)

2013年(77)

2012年(19)

2011年(10)

分类: LINUX

2014-01-24 09:59:16

原文地址:shell中数字计算方法总结 作者:daywbdb

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

在windows下,大家都知道直接运行calc,(c:/windows/system32/calc.exe),请可以打开计算器。
注:
calculate vt.&vi. 计算;calculator n. 计算器。calc就是这个计算的简写。
Ca在化学中是代表钙元素,calcium  钙(20号元素,符号Ca)。两者有什么联系呢?
calculate来自calculus,原义是做算术运算的小石子,是calx(石灰石)的小称。


那么在linux系统下,有无与windows下calc.exe类似的计算器呢?

下面总结linux下的三个命令,来介绍一下linux下的计算方法:
1、bc运算:

 bc在默认的情况下是个交互式的指令。在bc工作环境下,可以使用以下计算符号:
 + 加法
 - 减法
 * 乘法
 / 除法
 ^ 指数
 % 余数

 如:
 # 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+6            <=加法
 9
 4+2*3          <=加法、乘法
 10
 (4+2)*3        <=加法、乘法(优先)
 18
 4*6/8          <=乘法、除法
 3
 10^3           <=指数
 1000
 18%5           <=余数
 3+4;5*2;5^2;18/4      <=一行输入多个计算,用;相隔。
 7
 10
 25
 4
 quit           <=退出
 
 # 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'.
 scale=3         <=设小数位
 1/3
 .333
 quit
 
 以上是交互的计算,那到也可以不进行交互而直接计算出结果。
 A.用echo和|法,如:
 # echo "(6+3)*2" |bc
 18
 # echo 15/4 |bc
 3
 # echo "scale=2;15/4" |bc
 3.75
 # echo "3+4;5*2;5^2;18/4" |bc
 7
 10
 25
 4
 
 另外,bc除了scale来设定小数位之外,还有ibase和obase来其它进制的运算。
 如:
 //将16进制的A7输出为10进制, 注意,英文只能大写
 # echo "ibase=16;A7" |bc
 167
 //将2进制的11111111转成10进制
 # echo "ibase=2;11111111" |bc
 255
 //输入为16进制,输出为2进制
 # echo "ibase=16;obase=2;B5-A4" |bc
 10001
 
 对于bc还有补充,在bc --help中还可以发现:bc后可以接文件名。如:
 # more calc.txt
 3+2
 4+5
 8*2
 10/4
 # bc calc.txt
 5
 9
 16
 2

2、expr运算:
 expr命令可不光能计算加减乘除哦,还有很多表达式,都可以计算出结果,不过有一点需要注意,在计算加减乘除时,不要忘了使用空格和转义。下面直接用实例来介绍一下expr的运算,如:
 # expr 6 + 3       (有空格)
 9
 
 # expr 2 \* 3      (有转义符号)
 6

 # expr 14 % 9
 5
 
 # a=3
 # expr $a+5          (无空格)
 3+5
 # expr $a + 5         (变量,有空格)
 8

 # a=`expr 4 + 2`
 echo $a
 6
 # expr $a + 3
 9

 另外,expr对于字串的操作(计算)也是很方便的,如:
 //字串长度
 # expr length "yangzhigang.cublog.cn"
 21
 
 //从位置处抓取字串 (位置1开始抓取一个长度为11的子串)
 # expr substr "yangzhigang.cublog.cn" 1 11
 yangzhigang

 //字串开始处
 # expr index "yangzhigang.cublog.cn" cu
 13
 
3、dc运算:
 用dc来进行计算的人可以不多,因为dc与bc相比要复杂,但是在进行简单的计划时,是差不多的,不算难。dc为压栈操作,默认也是交互的,但也可以用echo和|来配合打算。
 如:
 # dc
 3
 2+
 p
 5
 4*
 p
 20
 quit
 
 # echo 3 2+ 4* p |dc
 20
 
4、echo运算:
 echo用来进行回显,是周知的事。上面也配合bc来进行计算。其实echo也可以单独进行简单的计算,如:
 # echo $((3+5))
 8
 # echo $(((3+5)*2))
 16
 
 echo还可以进行变量的计算,如:
 # a=10
 # b=5
 # echo $(($a+$b))
 15
 # echo $a+$b
 10+5
 # echo $a+$b |bc
 15
 
 //计算前天的日期
 #  echo `date +%Y%m%d`
 20090813
 #  echo `date +%Y%m%d`-2
 20090813-2
 #  echo `date +%Y%m%d`-2 |bc
 20090811
 
 
5、AWK运算:
 awk在处理文件的时,可以进行运算,那当然也可以单单用来计算了,如:
 # awk 'BEGIN{a=3+2;print a}'
 5
 # awk 'BEGIN{a=(3+2)*2;print a}'
 10


 

阅读(886) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~