shell_脚本开发_数值运算_bc_awk

发布时间 2023-10-10 10:36:47作者: WeChat2834
bc命令

bc命令是当作计算器的来用的,并且当作命令行来的,一般结合管道符使用(相当于echo把字符打印出来传递给bc处理

[root@localhost tmp]# bc  ###直接输入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'. 
1+3
4
123.23+134
257.23
2.2-1.1
1.1
^C
(interrupt) Exiting bc.   
[root@localhost tmp]#  ###ctr+c退出
###通常结合管道符来使用
[root@localhost tmp]# echo "4*4"
4*4
[root@localhost tmp]# echo "4.2*4"|bc  ###相当于echo把字符打印出来传递给bc处理(重要)
16.8
[root@localhost tmp]# num=5
[root@localhost tmp]# result=`echo $num*4|bc`
[root@localhost tmp]# echo $result
20
[root@localhost tmp]# 

  • 应用实例

    ##eg1:计算1~100的总和;就用公式1+2+3...+97+98+99+100直接打印输出
    [root@localhost tmp]# cat   testbc.sh 
    #!/bin/bash
    
    #
    all=0
    a=1
    while  [ $a -le 100 ]
    do
       all=$all+$a
       a=$(($a+1))
    done	
       echo $all=`echo $all|bc`
    [root@localhost tmp]# sh testbc.sh 
    0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100=5050
    [root@localhost tmp]# 
    
    ###################方法2
    [root@localhost tmp]# seq -s + 1 100;echo = ; echo `seq  -s + 1 100`|bc
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
    =
    5050
    [root@localhost tmp]# 
    ###################################方法3 tr替换命令  “ ” 替换为+
    [root@localhost ~]# echo {1..100}|tr " " "+" 
    1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32+33+34+35+36+37+38+39+40+41+42+43+44+45+46+47+48+49+50+51+52+53+54+55+56+57+58+59+60+61+62+63+64+65+66+67+68+69+70+71+72+73+74+75+76+77+78+79+80+81+82+83+84+85+86+87+88+89+90+91+92+93+94+95+96+97+98+99+100
    [root@localhost ~]# echo {1..100}|tr " " "+" |bc
    5050
    ####方法4用双小括号,不用bc
    [root@localhost ~]# [root@localhost ~]# echo $((`echo {1..100}|tr " " +`))
    5050
    [root@localhost ~]# 
    ####方法5 用expr 命令;注意+附近要有空格(因为expr命令是接收多个参数的形式来执行的)
    
    [root@localhost ~]# expr `seq -s " + " 1 100`
    5050
    [root@localhost ~]# 
    
    
    
awk支持数值计算

awk也支持小数运算,也支持复杂运算

  1. 先给awk传递数据
  2. 通过管道符交给awk
  3. awk定义动作 打印输出
1. 先给awk传递数据
2. 通过管道符交给awk
3. awk定义动作 打印[root@localhost ~]# echo "2.1 1.1"|awk '{print $1+$2}'
3.2
[root@localhost ~]# 
###1. 先给awk传递数据  
###2. 通过管道符交给awk
###3. awk定义动作 打印参数1+参数2
############也支持复杂的运算
[root@localhost ~]# echo "2.1 1.1"|awk '{print $1+4*$2}'
6.5
###
中括号运算
###语法
$[表达式]
[root@localhost ~]# echo $[3+5]
8
[root@localhost ~]# echo $[3.1+5]
bash: 3.1+5: 语法错误: 无效的算术运算符 (错误符号是 ".1+5")