上篇我们学会了如何使用及定义变量。按照尿性,一般接下来就该学基本数据类型的运算了。
  没错,本篇就仍是这么俗套的来讲讲这无聊但又必学的基本数据类型的运算了。

基本数据类型运算

操作符

符号 语义 描述
+ 10+10,结果为20
- 10-3, 结果为7
* 10*2,结果为20
/ 10/3, 结果为3(取整数)
% 求余 10%3, 结果为1 (取余数)
== 判断是否相等 两数相等返回1,否则0
!= 判断是否不等 两数不等返回1,否则0
> 大于 前者大于后者返回1,否则0
>= 大于或等于 前者大于或等于后者返回1,否则0
< 小于 前者小于后者返回1,否则0
<= 小于或等于 前者小于或等于后者返回1,否则0

上述操作符与其它语言相比,并无特殊之处。

注意:

  条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

  在shell中,对于基本数据类型的运算主要分为两种,整数运算浮点数(小数)运算。下面就分别来看看这两种运算:

整数运算

在shell中,有两种方式能实现整数运算,一种是使用expr命令, 另外一种是通过方括号($[])来实现。下面分别来看看:

expr

#!/bin/bash
#输出13
expr + #输出10+
expr + #输出7
expr - #输出30
expr \* #输出3
expr / #输出1
expr % #将计算结果赋值给变量
num1=$(expr % ) #将计算结果赋值给变量
num2=`expr % `

补充:(大于小于比较加转义,否则会将<做为重定向符号)

aaarticlea/png;base64,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" alt="" />

 

注意:

  1. 在以上的乘法(*)中,我们用了反斜线()来转义,不然会报错。

  2. 运算符前后必须还有空格,否则会被直接当作字符串返回。

  3. 如果要将计算结果保存到变量,就需要用到我们上篇文章讲到的那两种方式($() 或者 ``)来替换命令了。

这种种迹象无不让人吐槽啊。幸好还有一种实现方式,那就是接下来要看的方括号。

方括号($[])

#!/bin/bash
num1=
num2=
#输出num1 + num2=
echo "num1 + num2=$[$num1 + $num2]" #输出num1+num2=
echo "num1+num2=$[$num1+$num2]" #输出num1 - num2=
echo "num1 - num2=$[$num1 - $num2]" #输出num1 * num2=
echo "num1 * num2=$[$num1 * $num2]" #输出num1 > num2=
echo "num1 > num2=$[$num1 > $num2]" #输出num1 < num2=
echo "num1 < num2=$[$num1 < $num2]" #将运算结果赋值给变量,输出num3=
num3=$[$num1 / $num2]
echo "num3=$num3"
 

看了这种运算,再回看expr, 是不是觉得要升天,终于正常了。expr的那几个注意事项,在这儿都不算事儿。所以,如果要图简单,还是用这种方式吧。

浮点运算

在shell中,做浮点运算一般是用bash的计算器(bc)。在shell脚本中,一般我们的使用方法是:

variable=$(echo "options; expression" | bc)

options是bc的一些选项,例如: 可以通过scale去设置保留的小数位数。具体有哪些参数,可以man bc进行查看

expression就是我们具体的表达式,例如 10 * 3

" | " 这个符号,对于熟悉linux系统的人来说,这个再熟悉不过了。它叫做管道, 之所以会叫做管道,其实很形象,你可以把它看作一根水管,水管一头接入前一个命令的返回结果, 一头接入下一个命令。表示将前一个命令的执行结果作为后一个命令的参数输入。以上,表示将我们的表达式作为bc的参数输入。

#!/bin/bash
#表示 10/3, 保留2位小数,将结果赋值给了num, 输出3.33
num=$(echo "scale=2; 10 / 3" | bc)
echo $num aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhAAAAAmCAIAAAAa3jVHAAAFW0lEQVR4nO2d25mjMAxG0w+tUAqNUAh9pI5pYYvYfUgAXyRbsp2Q7Jzz+WUIyDLY+rEMzO1PwM/Pzw0AAEAEwQAAABMIBgAAmEAwAADABIIBAAAmEAwAADCBYAAAgAkEAwAATCAYAABgAsEAAAATCAYAAJiQBWNatvvBtkyXunh69BGetDHOf82Sd/sYMuvzOqbnjLJjsX9f5+H2FaZlG1zdvOqn5zGOW6ob6Oe8Pq/g+LbfXt9PXsW81k5F8bxNyxa11ntu57XxfOmC8b5BtBPIVNYUe9iLxG5EI+Y1MxTWYatC9t9vZ4xgKPWeg8983tTrMi2buUNq9f6tlRHMq9DcfTzWh7WToUGz2NXbxeI4+hsEY8fT31QDDXFDqrc+jsJ4r0neSwXjOMZ7zl4kGNWhTqEMKd2IgvEUinRY9jM+EMszjCPaNDLQzzOYzOtrp7p9gjHP02mqbiuI81nofm5QfYruQ6ZpOjcH+xfP2wjBaDpsuGBcHkEov630IQnGc4S+YKI9LhDv0UgSjO7o+QsFI7FVa/we5lNljrtTcfoq1vtewfCfN6tgTMt2v18eGiiUvPSFiWRMR2sbxgxFkM2I9oyyHFF64fwlOMCZoHyaEgRDCwLX+KkRnek8+qU/xRulKCxF1SY/M1sPQ9pkIfwhOVTxyqIXVRclwThaXD+fLbXezIJxeVCgULRSGVjpKEnWJfKbwL33226Iw3u7MHqUV60eBwTHRrtbE0qPmJvtqd3XXuan4roYxdW1uCNlJFYrB/msvdL9gDC/FNcsLYIh6EdiS1gWEzppDVEwDgv165u0wK6nFsG4PCJQKFopDrFjWAWjJh1q+XhxLWDEEeI0psTSZPge+wt3prZRHEcK/eCr/axUoPhZODZfBZaXjGP/TX55NNApGKVO5VmErqSkYoUs2/SpPoJB+d5SCwHx4qJ8HxfFknjyLs/hI4QDik8ECQN7nW+1VHiBadnWWYhaQjy91E/N+eQmv6RA8eygLBhae+v+OGdMvpRU5ak7e+y2CoZB0ZlhUH5d8RIcmI6XICFlGUbaGC/duQuBuGeGsc5J9kyKe1f7WW5CPcuVZVlcM4xos5aSanrGwbPoXZ2z2gWrLBjBX1UNYg2D8vYijLK0H6YpZSX1fu9xw0hyVCIY3idqhdd0zgbL6WopoLjXBuZlz7A9Zhip6EmKcYWfRe9T66o/0T5SU7Ima+3VKAVO+xpGZCdX12ro7kpJ7c2NLp5yPgV3TbieklJq1Z6aUJ+miOaLca9Up4/JmJByB+ccLL9/UPfPf6yvIQb7R5el1OmliZ9qZ101XxRLvu1Cvaar+IhMtpxE3hFPQ1GE0+p9kWbkh2RPSW2L84larf8kne6pQ+odqDpe6pWKfVZdyX6rnzLxnb7w4E7iT7UfSoGvMq4L+96lMZDrUUKoo7kRbcoaWvJ0OUGmFjluiOfz/MV1DT/pTW/oyjl6t1+J36fOOVDByAeeHgePlJT8Q0dAh5juiGiesb7P3NzyeZBv+ZbUb6EuGM5kdPc7v6M4X2jtznyPzaf9x2EV0RhDw2J4gnFFzEyvYDSJxe3G12o/jeJTK+pk2b79OobfhAxRCwBwgGDAt4NaALwJQTDCRRj766b5/l47AK2gFgDvQBAM7euJGurXFp12APpALQBeSzEl5V3r0fbvXzMCaAe1ABhDSTDQCwAAOBAFQ/nqjoq2v9cOAAB8LrUZhvOTu65/HgoAAF9E+bFa72r1p788BgAAzZQFg1UMAAB44ktJFb7aKO5f3g4AAF9E5cU98d+wCP+BRvk644d9nQIAANrh0yAAAGACwQAAAAv/AFjXu9NdWqllAAAAAElFTkSuQmCC" alt="" />

布尔运算符(一个运算符)

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。


逻辑运算符(两个尖括号)

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符(一个尖括号)

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -n $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

文件测试运算符(一个尖括号)

文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

(1)EQ 就是 EQUAL等于

NE 就是 NOT EQUAL不等于

GT 就是 GREATER THAN大于 

LT 就是 LESS THAN小于

GE 就是 GREATER THAN OR EQUAL 大于等于

LE 就是 LESS THAN OR EQUAL 小于等于

(2)使用 [[ ... ]] 条件判断结构,而不是 [ ... ],能够防止脚本中的许多逻辑错误。比如,&&||< 和 > 操作符能够正常存在于 [[ ]] 条件判断结构中,但是如果出现在 [ ] 结构中的话,会报错。

  也就是逻辑运算符用两个尖括号,其他普通的比较用一个括号就可以

小结

  本篇比较无聊,简单介绍了shell的基本运算符及其运算。shell运算主要分为整型和浮点型的运算。整型又有两种实现方式,浮点型是通过使用bash内置的计算器(bc)来实现的。

好啦,到此,我们学习了shell的变量的使用,也学习了基本数据类型变量的计算啦!挺简单吧

  

  接下来可以学习shell编程三:http://www.cnblogs.com/qlqwjy/p/7745983.html

最新文章

  1. noip2016 Day1T3
  2. php 常见的问题
  3. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
  4. Gmail新版截图曝光 你还能认得出来吗?
  5. 关于boostrap的thead固定tbody滚动
  6. Dubbo负载均衡策略
  7. Python 转化成 PB 格式数据
  8. java中this和super关键字的使用
  9. SQL Server 本地数据库登录不上 解决方法
  10. JS-Promise笔记
  11. redis在windows系统下的安装和两个问题
  12. webVR框架A-frame
  13. Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用
  14. iOS编码规范参考
  15. Fibonacci number
  16. C# 定时执行方法: System.Timers.Timer用法示例
  17. s3c2440地址分配
  18. RHEL和Centos常用版本
  19. String 源码浅析————终结篇
  20. 赤池信息量准则 ( Akaike information criterion)

热门文章

  1. OpenRead方法打开文件并读取
  2. vscode 插件整理
  3. PAT (Basic Level) Practise (中文)-1036. 跟奥巴马一起编程(15)
  4. easyui树节点拖拽排序的存储过程
  5. linux的less命令
  6. luogu2312 解方程 (数论,hash)
  7. Taro:使用taro完成小程序开发
  8. CSS3-::selection
  9. Google实践中总结的Python规范,get了吗?
  10. [转]Makefile中的wildcard/notdir/patsubst