博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell中的数值运算
阅读量:4966 次
发布时间:2019-06-12

本文共 1209 字,大约阅读时间需要 4 分钟。

By francis_hao    Oct 2,2017

 

本文摘录自bash的man手册。

 

算数运算相关的形式

形式

含义

((expression))

expression按照下面描述的算术运算规则进行运算。如果最终结果是非0的,返回0。其他结果返回1。该形式和let "expression"等同

let arg [arg ...]

每个arg都是一个算数表达式,如果最后一个arg结果是非0的,返回0,其他结果返回1。

 

算数扩展

算数扩展允许计算算数表达式,并替换该结果。算数扩展的形式是

$((expression))

expression被视作在双引号""中,但是在圆括号中双引号不被特殊处理。expression中的所有项都会被参数扩展和命令替换。如果expression无效,bash会打印一条指示失败的信息。另外,算数扩展可以嵌套。

例如:

其中,算数扩展会直接替换结果,因此$((1+1))就结果来说,就是2。

 

算术运算

在特定的环境下(例如let和算数扩展中),shell允许数值的算数运算,运算在固定长度的整数中运算,并且不检查是否溢出。除以0会被捕获并标记为错误(打印一条错误信息)。运算符和他们的优先级、结合律和C语言中的一致,括号可以改变优先级。下表按照优先级由高到低排序。

运算符

说明

id++ d--

自增,自减(先取值后运算)

++id --id

自增,自减(先运算后取值)

  • +

一元的负号和正号

! ~

逻辑非和按位非

**

乘方

* / %

 

+ -

 

<< >>

 

<= >= < >

 

== !=

 

&

 

^

按位异或

|

 

&&

 

||

 

expr?expr:expr

 

= *= /= %= += -= <<= >>= &= ^= |=

 

expr1 , expr2

逗号

 

在表达式中,shell变量可以不使用$来引用,一个null或未设置的变量被当做0来处理。变量可以通过declare的-i选项来设置其整数属性,但是,在算数表达式中的变量不是必须拥有整数属性,因为表达式中默认当作整数处理。

以0开头的常数被解释成八进制数,以0x或0X开头标记为十六进制,其他的进制可以通过[base#]n来表示,其中,可选的base是一个十进制数,在0-64之间,表示进制。n是指定的进制的数,如果base#被省略,则使用十进制。大于9的数字会使用小写字母、大写字母、@和_按顺序表示。最大为64进制,就是最大要能表示到63,那么0-9代表0-9,a-z表示10-35,A-Z表示36-61,@表示62,_表示63。

 

 

本文由 创作,采用 进行许可。欢迎转载,请注明出处:
转载自:

 

 

参考

【1】脚本之家 Shell脚本中不同进制数据转换

【2】stackoverflow.com

【3】man sh

转载于:https://www.cnblogs.com/yinghao1991/p/7622777.html

你可能感兴趣的文章
下载GO的开源开发工具LITEIDE
查看>>
接口操作XML
查看>>
idhttp访问DATASNAP有密码验证的中间件
查看>>
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
DELPHI开发LINUX包
查看>>
CENTOS7安装OPENSSL
查看>>
LITEIDE配置
查看>>
DELPHI开发LINUX的动态库
查看>>
TThread.Queue和TThread.Synchronize的区别
查看>>
CENTOS7安装NGINX
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>