当前位置: 首页 > news >正文

shell(7):四则运算

 shell 四则运算:expr,let,bc,(()),

1、expr的用法:

expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串。

详细使用方式:expr --help

expr 表达式

表达式说明:

 

  • 用空格隔开每个项;
  • 用 / (反斜杠) 放在 shell 特定的字符前面;
  • 对包含空格和其他特殊字符的字符串要用引号括起来

使用实例:

1、计算字串长度

> expr length "this is a test" 14

2、抓取字串

> expr substr "this is a test" 3 5 is is

3、抓取第一个字符数字串出现的位置

> expr index "sarasara"  a2

4、整数运算

 > expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义) 90 > expr 30 * 3 expr: Syntax error

 

2、let的用法:

let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。

语法格式

let arg [arg ...]

参数说明:

arg:要执行的表达式

实例:

自加操作:let no++

自减操作:let no--

简写形式 let no+=10,let no-=20,分别等同于 let no=no+10,let no=no-20

以下实例计算 a 和 b 两个表达式,并输出结果:

#!/bin/bash
let a=5+4 let b=9-3 
let c=7/4
let d=4*6
let e=1+4*6+3*2+2
let f=1+4*6+3*2+2+8/5
echo $a $b $c $d $e $f

以上实例执行结果为:

9 6 1 24 33 34

有些用法区别去expr:

let 不需要空格隔开表达式的各个字符。而 expr 后面的字符需要空格隔开各个字符。

# expr 实例
$ s=`expr 2 + 3`
$ echo $s
5 # let 实例 $ let s=(2+3)*4 $ echo $s

 

3、(()) 的用法:

echo $((运算表达式))

echo $((1+4*6+3*2+2+8/7))

34

4、bc的用法

 

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

 

它类似基本的计算器, 使用这个计算器可以做基本的数学运算。

 

常用的运算:

 

  • + 加法
  • - 减法
  • * 乘法
  • / 除法
  • ^ 指数
  • % 余数

语法

bc(选项)(参数)

选项值

  • -i:强制进入交互式模式;
  • -l:定义使用的标准数学库
  • ; -w:对POSIX bc的扩展给出警告信息;
  • -q:不打印正常的GNU bc环境信息;
  • -v:显示指令版本信息;
  • -h:显示指令的帮助信息。

参数

文件:指定包含计算任务的文件。

实例

$ 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'. 2+3 5 5-2 3 2+3*1 5

输入 quit 退出。

通过管道符

$ echo "15+5" | bc
20

scale=2 设小数位,2 代表保留两位:

$ echo 'scale=2; (2.777 - 1.4744)/1' | bc
1.30

bc 除了 scale 来设定小数位之外,还有 ibase 和 obase 来其它进制的运算:

$ echo "ibase=2;111" |bc
7

进制转换

#!/bin/bashabc=192 
echo "obase=2;$abc" | bc <pre> <p> 执行结果为:11000000,这是用bc将十进制转换成二进制。</p> <pre> #!/bin/bash  abc=11000000 echo "obase=10;ibase=2;$abc" | bc

执行结果为:192,这是用bc将二进制转换为十进制。

计算平方和平方根:

$ echo "10^10" | bc 
10000000000 $ echo "sqrt(100)" | bc 10

5、shell 浮点数除法计算:

样例:

num1=2
num2=3
num3=`expr $num1 / $num2`
这个时候num3=0 ,是因为是因为expr不支持浮点除法
解决的方法:
num3=`echo "scale=2; $num1/$num2" | bc`

 

带小数点显示:

echo $(printf "%.2f" `echo "scale=2;1/3"|bc`)

 

使用bc工具,scale控制小数点后保留几位
还有一种方法,使用awk进行计算:
awk 'BEGIN{printf "%.2f\n",’$num1‘/’$num2‘}'
如果用百分比表示:
awk 'BEGIN{printf "%.2f%\n",(’$num1‘/’$num2‘)*100}'

 

网上找的awk和bc效率对比的截图:
 

 

http://www.xdnf.cn/news/821251.html

相关文章:

  • RDCMan之DPI 和 Screen Resolution设置
  • browser插入数据 db_SQLite Database Browser数据库查看器图文使用教程
  • ckplayer.js视频播放插件
  • sql中in、exists和not exists的用法
  • 基于PHP的编程类MOOC网站设计与实现
  • MSSQL数据库的安装与使用
  • C++程序正向编译逆向反编译(一)
  • FPGA学习——触发器(FF)
  • MySQL数据库优化(基于酒店2000w条数据)
  • 3dmax vray如何创建真实的灯光?3dmax vray 室内照明教程
  • 番茄花园 Windows XP Pro SP2 美化版 V 6.2
  • LCD1602中文资料
  • java关键字abstract(抽象)详解
  • Android中layout过程详解
  • 网络 || 科来网络分析系统
  • 0磁道损坏的硬盘如何修复?
  • 分享70个Java源码总有一个是你想要的
  • Linux的安装与配置(保姆级教学)
  • Servlet--HttpServletRequest获取请求信息(请求头、请求行、参数)详解
  • Linux网络命令详解
  • 05 ORM
  • 天龙八部单机版(兽血沸腾):大背包天机华裳格武道二
  • root权限获取排行榜,root权限软件排行榜
  • 电子产品硬件开发流程
  • update set命令用来修改表中的数据
  • DataFormatString,DataTextFormatString
  • php钓鱼网站怎么做视频教程,反黑钓鱼网站全过程
  • 5款常用的漏洞扫描工具,网安人员不能错过!
  • 原码反码补码
  • Android开发之修改系统开机Logo与开机动画