shell_脚本开发_数值运算_bc_awk
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也支持小数运算,也支持复杂运算
- 先给awk传递数据
- 通过管道符交给awk
- 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")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!