在Bash的算术运算中有以下几种方法:
名称                语法                    范例
算术扩展            $((算术式))              r=$((1+2*3))
使用外部程序expr    expr 算术式              r=`expr 1+2*3`
使用$[]             $[算术式]                r=$[1+2]
使用内置命令        declare -i 变量=算术式    declare -i r=1+2*3
使用内置命令let     let 算术式                let r=1+2


i++运算后加1,i--运算后减1
++i运算前加1,--i运算前减1

一、算术扩展
算术扩展的语法是:$((表达式)),如果表达式中有变量,该变量之前最好不要加$这个符号,以免变量不存在造成语法错误,例:
unset i
echo $((2+$i))
由于变量i不存在,所以会变成 echo $((2+)),这样语法就错误了。
但如果写成echo $((2+i)),((2+i))是一个合法的算术式,就算变量不存在,仍可正确计算。

a=5
a=$((++1)) a的值加1后,在赋值给a
a=$((--1)) a的值减1后,在赋值给a
a=$((3+a--))运算后减1
二、使用外部程序expr做算术运算
外部程序expr本来的作用,是在“标准输出”显示表达式的值。这个是外部程序,和Shell没有关系,所以移植性非常好,
如果注重跨平台,那么可以在脚本本使用expr代替其他算术表达式。

expr 3 + 4  
它会在屏幕上显示7,注意"+"两边有空格。
在使用expr时,要特别"表达式"中是否包含shell的特殊字符,如*、|、<、>、!、&、(、),要使用"\"来转义。
1、r=`expr 参数1 \|参数2`
|代表"或"之意.如果”参数1“存在、非空、不是0,则传回”参数1“的值,否则传回"参数2"的值。 
r=`expr 3 \| 0` r的值为3
r=`expr 0 \| 2` r的值为2
2、r=`expr 参数1 \&参数2`
如果"参数1"和"参数2"都存在、非空、不是0,则传回"参数1"的值,否则传回0.
r=`expr 3 \& 0` r的值为0
3、比较
算术            是否成立    r的值
r=`expr 1 \< 2`      是        1 
r=`expr 3 \<= 2`     否        0 
r=`expr 2 \= 2`      是        1 
r=`expr 3 \!= 2`     是        1 
r=`expr 3 \>= 2`     是        1 
r=`expr 3 \> 2`      是        1 
4、加
r=`expr 4 + 5` r的值为9
5、减
r=`expr 3 - 5` r的值为-2
6、乘
r=`expr 3 \* 5` r的值为15
7、除
r=`expr 32 / 5` r的值为6(余数无条件舍去)
8、乘方
expr没有乘方的功能
9、求余数
r=`expr 32 % 5` r的值为2
10、计算字符串长度
r=`expr length "hello"`  r的值为5
三、用$[]做算术运算
使用$[]做算术运算和$(())类似
加:r=$[4+5]    r的值为9
减:r=$[4-5]    r的值为-1
乘:r=$[4*5]    r的值为20
除:r=$[5/2]    r的值为2
余数:r=$[5%2]  r的值为1
乘方:r=$[2**3] r的值为8

四、使用declare、let做算术运算
declare为bash shell的内置命令。
declare -i I
I=5+4 
echo $I 
因为I事先被定义为整数(算术运算),所以$I的值为9,而不再是字符串5+4
当被定义为整数后,便可以进行加、减、乘、除..等操作
五、用let做算术运算

let为bash shell的内置命令。

let I=8+4*5
echo $I 
此时输出的值为28
let表明后边的直接说一个算术式。
也可使用空格符让表达式可读性高一点,但这时必须使用引号包括表达式才行。
let "i = i + 5"

本文出自 “生命不息,奋斗不止!” 博客,请务必保留此出处http://linuxnote.blog.51cto.com/9876511/1641189

Linux之Shell的算术运算的更多相关文章

  1. Linux Bash Shell 快速入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  2. Linux Bash Shell入门教程

    Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/m ...

  3. Linux Bash Shell j简单入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  4. 3. Linux的shell编程

    Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...

  5. Linux Bash Shell快速入门 (二)

    BASH 中的变量介绍BASH 中的变量都是不能含有保留字,不能含有 "-" 等保留字符,也不能含有空格. 简单变量在 BASH 中变量定义是不需要的,没有 "int i ...

  6. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  7. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  8. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  9. linux中用shell获取昨天、明天或多天前的日期

    linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...

随机推荐

  1. JS010-DOM

    JS010-DOM 本章内容: 1.理解包含不同层次节点的DOM 2.使用不同的节点类型 3.客服浏览器兼容性问题及各种陷阱 DOM(文档对象模型)是针对 HTML和xml文旦过得一个API(应用程序 ...

  2. Python目录操作

    Python目录操作 os和os.path模块os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回但前目录('.') ...

  3. python学习2 lambda表达式

    学习C#的,对这个就特别熟悉了 lambda函数,它没有名字,只有参数和表达式: lambda  args: expression def func1(func,arg): return func(a ...

  4. Tengine 常用模块使用介绍

    Tengine 和 Nginx Tengine简介 从2011年12月开始:Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能 和特性. ...

  5. hdu4941 Magical Forest (stl map)

    2014多校7最水的题   Magical Forest Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit ...

  6. Extjs3 + swfUpload实现多文件上传控件

    要在ExrtJS框架实现选择多文件上传,FileUploadField已经无法满足需求,所以采用了 swfUpload上传控件,上传窗口如下: 多选文件进行上传(其实是每个文件异步上传),可以中途停止 ...

  7. [设计模式] javascript 之 模板方法模式

    模板方法模式说明 定义:定义方法操作的骨架,把一些具体实现延伸到子类中去,使用得具体实现不会影响到骨架的行为步骤! 说明:模式方法模式是一个继承跟复用的典型模式,该模式定义了一个抽象类,Abstrac ...

  8. embed 层级太高

    它怎么就好了,凭什么就好了.为什么就好了.我到底当时是哪里写错了.怎么个情况 兼容Firefox ,IE的flash透明和flash置底代码 <object classid="clsi ...

  9. Excel 单元格自定义格式技巧总结

    第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式 ...

  10. 使用原生JS封装Ajax

    使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...