在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. 利用WireShark进行DNS协议分析

    一.准备工作 系统是Windows 8.1Pro 分析工具是WireShark1.10.8 Stable Version 使用系统Ping命令发送ICMP报文. 二.开始工作 打开CMD.exe键入: ...

  2. IBatis一对多嵌套查询

    1)类 public class AppData { // public int ModuleId { get; set; } public int DataId { get; set; } publ ...

  3. 完整的ajax请求投票点赞功能的实现【数据库表一(票数)表二(ip限制重复投票)】

    前端php页面 <?php if(isset($_GET['id'])){ $id=$_GET['id']; } include('data/conn.php'); $sqls="se ...

  4. PyQ1_介绍

    PyQt是一个创建GUI应用程序的工具包.它是Python编程语言和Qt库的成功融合.Qt库是目前最强大的库之一.PyQt是由Phil Thompson 开发.   PyQt实现了一个Python模块 ...

  5. Java关键字——final

    final在Java中表示的意思是最终,使用final关键字声明类属性.方法,注意: 1.使用final声明的类不能有子类 2.使用final声明的方法不能被子类所覆写 3.使用final声明的变量即 ...

  6. OBJ Loader Source Code

    https://github.com/ChrisJansson/ObjLoader http://www.codeproject.com/Articles/798054/SimpleScene-d-s ...

  7. Robot Framework--10 万能的evaluate

    转自:http://blog.csdn.net/tulituqi/article/details/10124559 这一讲我们重点来介绍一下一个常用的关键字evaluate. 我觉得这个关键字在RF里 ...

  8. Thrift 的原理和使用

    thrift 的原理和使用 Thrift 架构 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过IDL(Interf ...

  9. SQL JOINS

  10. VisualStudio基本使用(2)-使用VS2013来编译C语言程序

    切换到C语言程序所有目录,执行cl test.c