Linux

Shell编程系列(三)-- 运算符

2019-05-13  本文已影响0人  XinAnzzZ

前言

在上一篇文章Shell编程系列(二)-- Bash 变量中, 我们学习了Shell编程中的变量相关的知识。通过上一篇文章的讲解,我们不难发现,Shell编程中变量的缺点就是:(1)弱类型;(2)默认字符串类型。 这就导致了我们是没有办法直接对Shell变量进行加减乘除数值运算的,所以本文就讲解一下Shell中的运算符和运算方式。

declare命令

declare命令是用于声明变量类型的命令。前文我们提到,Shell编程中所有的变量默认字符串类型,所以无法进行数值运算,想要数值运算,第一步就是需要使用declare命令来进行变量类型的声明。 语法:declare [+/-] [选项] 变量名

选项 作用
- 给变量设定类型属性
+ 取消变量类型属性
-a 将变量声明为数组类型
-i 将变量声明为整数型
-x 将变量声明为环境变量
-r 将变量声明为只读变量
-p 显示指定变量的类型

数值运算方法

  1. 方法一:

<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="sh" cid="n34" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 30px 10px 0px; border: 1px solid; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;"> a=1
b=2
declare -i c=a+b
echo $c
3</pre>

<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="sh" cid="n39" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 30px 10px 0px; border: 1px solid; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;"> a=1
b=2
c=(expra + b) echoc
3</pre>

<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="sh" cid="n44" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 30px 10px 0px; border: 1px solid; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;"> a=1
b=2
c=((a+b)) echoc
3</pre>

<pre spellcheck="false" class="md-fences md-end-block md-fences-with-lineno ty-contain-cm modeLoaded" lang="sh" cid="n49" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: inherit; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 30px 10px 0px; border: 1px solid; width: inherit; background-position: inherit inherit; background-repeat: inherit inherit;"> a=1
b=2
c=[a+b] echoc
3</pre>

关于Shell运算符的内容大概就是这些,感谢阅读本文。如果您在阅读的过程中有任何的意见或者建议,欢迎留言。

优先级 运算符 说明
13 -, + 负、正
12 !, ~ 逻辑非,按位取反或补码
11 *, /, % 乘、除、取模
10 +, - 加,减
9 <<, >> 按位左移,按位右移
8 <=, >=, <, > 小于等于,大于等于,小于,大于
7 ==, != 等于,不等于
6 &
5 ^ 异或
4 ¦
3 && 逻辑与
2 ¦ 逻辑或
1 =, +=, *=, /=, %=, &=, ^=, ¦ 赋值,运算且赋值

运算符:

  1. 方法四

第三、四种方法,加号两侧加不加空格都可以,所以比较推荐这两种方式

  1. 方法三

注意,$a + $b加号两侧必须加空格,否则不会进行数值运算。

  1. 方法二

这里声明变量a和变量b的时候并未指定数据类型,但是指定了变量c的数据类型为整形,那么Shell会自动认为ab也是整形,然后进行整数运算。

上一篇下一篇

猜你喜欢

热点阅读