在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. matlab连接sql数据库

    最近项目还涉及到matlab连接数据库,下面我就记录如何进行配置使得matlab能够连接sql数据库.由于最近工程做的多一些,所以分享的都在工程配置上,当初为了这些配置可是反复卸载与重装,算法其实也有 ...

  2. can not import Flask错误

    在学习flask官方文档——应用构建代码时,遇到了一个小问题照例子敲好代码以后出现了can not import  Flask错误,思考很久也没有解决,最后发现是因为应用模块和flask重名了.下面是 ...

  3. Java——jar命令

    把*.class压缩成一个文件,这样的文件就称为jar文件. 如果想要生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩. 当用户得到一个jar文件后,即可通过设 ...

  4. 在 Mac OS X 终端里使用 Solarized 配色方案

    MacOS X 终端solarized配色 相信长期浸泡在终端和代码的小伙伴们都有一套自己喜爱的配色方案.以前一直在用简单.适合阅读的 Terminal.app 配色方案,换到 MacBook Pro ...

  5. winform的扩展的带有截图功能picturebox

    using System; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using Sys ...

  6. jsp机制基础

    JSP 和Servlet技术一样,JSP也是SUN公司定义的一种开发动态web资源的技术,属于JavaEE技术之一.JSP实际上就是Servlet,它们在一起又称JSP/Servlet规范. Serv ...

  7. LSM存储模型

    LSM存储模型 数据库有3种基本的存储引擎: 哈希表,支持增.删.改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统.对于key-value的插入以及查询,哈希表的复杂度 ...

  8. Quartz.Net 基于XML配置启动

    1.App.config <configSections> <section name="quartz" type="System.Configurat ...

  9. C# Thread挂起线程和恢复线程

    前言 众所周知,Thread类中的挂起线程和恢复线程微软已标记过时,因为可能会造成问题   Resume()   恢复当前线程 已过时. Resumes a thread that has been ...

  10. 【8-17】HTML测试

    Source : http://www.w3school.com.cn/html HTML 测验 结果:9/20 您的回答: 1.HTML 指的是? 您的回答:超文本标记语言(Hyper Text M ...