用途说明
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. # 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