Linux之Shell的算术运算
在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的算术运算的更多相关文章
- Linux Bash Shell 快速入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- Linux Bash Shell入门教程
Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令 及 /usr/share/m ...
- Linux Bash Shell j简单入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- 3. Linux的shell编程
Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...
- Linux Bash Shell快速入门 (二)
BASH 中的变量介绍BASH 中的变量都是不能含有保留字,不能含有 "-" 等保留字符,也不能含有空格. 简单变量在 BASH 中变量定义是不需要的,没有 "int i ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- 使用C#给Linux写Shell脚本(下篇)
在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...
- linux中用shell获取昨天、明天或多天前的日期
linux中用shell获取昨天.明天或多天前的日期 时间 -- :: BlogJava-专家区 原文 http://www.blogjava.net/xzclog/archive/2015/12/0 ...
随机推荐
- JAVA Socket超时浅析
JAVA Socket超时浅析 套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字&q ...
- 安装scikit-learn过程记录
环境:Windows 10 X64企业版. 安装python2.7: 官网下载python-2.7.12.amd64.msi安装文件,过程不赘述.安装完成后在PATH环境变量中加入%PYTHON_HO ...
- python 五子棋
http://www.skywind.me/blog/archives/1029 http://blog.csdn.net/skywind/article/details/8164713 https: ...
- CentOS7 Mini安装Oracle(图形化安装)
以下操作在root用户下进行 1.mini版centos7没有ifconfig指令,可以如下操作 [root@localhost ~]# yum upgrade [root@localhost ~]# ...
- FBX Transformation
2010: http://download.autodesk.com/us/fbx/20102/FBX_SDK_Help/index.html?url=WS1a9193826455f5ff3913a1 ...
- Creating a ZIP Archive in Memory Using System.IO.Compression
Thanks to http://stackoverflow.com/a/12350106/222748 I got: using (var memoryStream = new MemoryStre ...
- testNg vs junit 4.X @Test
http://www.ibm.com/developerworks/cn/java/j-cq08296/ 一个简单的测试用例 初看起来,JUnit 4 和 TestNG 中实现的测试非常相似.为了更好 ...
- CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL)
CentOS 6.5安装配置LNMP服务器(Nginx+PHP+MySQL) 一.准备篇: /etc/init.d/iptables stop #关闭防火墙 关闭SELINUX vi /etc/sel ...
- Java并发编程核心方法与框架-TheadPoolExecutor的使用
类ThreadPoolExecutor最常使用的构造方法是 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAli ...
- elasticsearch集群管理工具head插件(转)
elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es 插件安装方法1: 1.elasticsearc ...