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。

 

 


本文由 刘英皓 创作,采用 知识共享署名-非商业性使用-相同方式共享3.0中国大陆许可协议 进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/7622777.html

 

 

参考

【1】脚本之家 http://www.jb51.net/article/57943.htm Shell脚本中不同进制数据转换

【2】stackoverflow.com https://stackoverflow.com/questions/27738943/what-is-unary-plus-minus-in-r

【3】man sh

shell中的数值运算的更多相关文章

  1. Shell基础(二):Shell中的数值运算、条件测试操作、使用if选择结构

    一.Shell中的数值运算 目标: 本案例要求熟悉Linux Shell环境的特点,主要练习以下操作: 1> 使用expr.$[ ].let等整数运算工具:定义变量X=1234,然后计算X与78 ...

  2. Shell编程——Shell中的数学运算

    在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...

  3. 在shell script中进行数值运算的两种方法

    方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...

  4. linux下数学运算器:expr命令(shell中完成数学运算)

    expr用法  expr命令一般用于整数值,但也可用于字符串.一般格式为:  expr argument operator argument  expr也是一个手工命令行计数器.  $expr 10 ...

  5. shell中的数学运算

    shell中要进行数学运算通常有3中方法: expr命令 比如 expr 1 + 6就会返回7,使用expr的缺点就是碰到乘法运算,或者加括号(因为它们在shell中有其他意义),需要使用转义,比如: ...

  6. Shell中数学计算/运算

    shell中的赋值和操作默认都是字符串处理. 1)使用let(只能进行整数运算)var=1let "var+=1"echo $var输出结果为2 注意:a)let几乎支持所有的运算 ...

  7. linux中的数值运算

    一.declare 作用:声明变量类型,bash默认变量为字符串类型的,并且字符串在拼接时直接拼接,不需要加号 使用方法: 二.数值运算 加法运算 a= b= c=$(($a+$b)) echo $c

  8. shell脚本基础 数值运算 判断 及if语句

    数值运算 整数运算[三种,随便掌握一种即可]expr 数字 运算符 数字 [root@ceshiji ~]# expr 1 + 1(运算符号都是+ - * / 注:*需要\*.%是取余,余数只有0 1 ...

  9. shell基础:数值运算与运算符

    linux的shell中,变量的类型默认都是字符串型. export将aa声明为环境变量.也可用declare声明.其实就是改变了-x属性 $(()) 最常用.

随机推荐

  1. Java应用基础微专业-进阶篇

    第1章--使用对象 1.1 字符类型 char c = 65; // char --> int char c = '\u0041'; // \u: unicode + (Hex 41--> ...

  2. PNG和PVR之间互相转换的脚本

    项目经常会将png和pvr之间互相转换,这里mark一个脚本,会将当前目录下的文件全部批量转换 png转换成pvr @echo off path %path%;"C:\Program Fil ...

  3. 【转】MMORPG游戏服务器技能系统设计:表格字段与技能程序框架

    本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖讨论~ 技能其实是战斗系统的一个组成部分,战斗基本 ...

  4. 【20180807模拟测试】T2 box

    [问题描述] 有个桌子长 R 宽 C,被分为 R*C 个小方格.其中,一些方格上有箱子,一些方格上有按 钮,一些方格上有障碍物,一些方格上是空地.现在有个任务,需要把所有箱子推到这些按 钮上面.箱子有 ...

  5. Linux 静态和动态添加路由

    (一)静态添加 1/5 首先让我们查看当前机器的路由表,执行如下命令:route -n [root@vnode33 network-scripts]# route -n Kernel IP routi ...

  6. HBase 参考文档翻译之 Getting Started

    本篇是对HBase官方参考文档的大体翻译,介于本人英文水平实在有限,难免有纰漏之处.本篇不只是对官方文档的翻译,还加入了一些本人对HBase的理解.在翻译过程中,一些没有营养的废话,我就忽略了没有翻译 ...

  7. Java容器之Set接口

    Set 接口: 1. Set 接口是 Collection 的子接口,Set 接口没有提供额外的方法,但实现 Set 接口的容器类中的元素是没有顺序的,且不可以重复: 2. Set 容器可以与数学中的 ...

  8. iOS- 简单说说iOS移动客户端SQLite3的基本使用

    1.为什么要使用SQLite3? •大量数据需要存储 •管理数据,存储数据   SQLite是一种关系型数据库(也是目前移动客户端的主流数据库)     2.SQLite3的几种存储类型   a.NU ...

  9. <Effective C++>读书摘要--Implementations<一>

    1.For the most part, coming up with appropriate definitions for your classes (and class templates) a ...

  10. Uncaught ReferenceError: wx is not defined

    程序的分享功能调用了微信的接口,但是忽然发现就报这个错误, Uncaught ReferenceError: wx is not defined 同时下方还有这个错误 This content sho ...