zoukankan      html  css  js  c++  java
  • Linux命令之bc

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

    原文地址

  • 相关阅读:
    使用CustomValidate自定义验证控件
    C#中金额的大小写转换
    Andriod出错之Unable to build: the file dx.jar was not loaded from the SDK folder!
    VC 编写的打字练习
    机房工作笔记Ping只有单向通
    web服务协同学习笔记(1)
    Dll 学习3 将MDI子窗口封装在DLL中
    机房工作学习文件共享
    Andriod出错之Failed to find an AVD compatible with target 'Android 2.2'
    Andriod出错之wrapper was not properly loaded first
  • 原文地址:https://www.cnblogs.com/xuelu/p/3785456.html
Copyright © 2011-2022 走看看