Shell编程系列(三)-- 运算符
前言
在上一篇文章Shell编程系列(二)-- Bash 变量中, 我们学习了Shell编程中的变量相关的知识。通过上一篇文章的讲解,我们不难发现,Shell编程中变量的缺点就是:(1)弱类型;(2)默认字符串类型。 这就导致了我们是没有办法直接对Shell变量进行加减乘除数值运算的,所以本文就讲解一下Shell中的运算符和运算方式。
declare命令
declare
命令是用于声明变量类型的命令。前文我们提到,Shell编程中所有的变量默认字符串类型,所以无法进行数值运算,想要数值运算,第一步就是需要使用declare
命令来进行变量类型的声明。 语法:declare [+/-] [选项] 变量名
选项 | 作用 |
---|---|
- | 给变量设定类型属性 |
+ | 取消变量类型属性 |
-a | 将变量声明为数组类型 |
-i | 将变量声明为整数型 |
-x | 将变量声明为环境变量 |
-r | 将变量声明为只读变量 |
-p | 显示指定变量的类型 |
数值运算方法
- 方法一:
<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=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=a + c
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+c
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+c
3</pre>
关于Shell运算符的内容大概就是这些,感谢阅读本文。如果您在阅读的过程中有任何的意见或者建议,欢迎留言。
优先级 | 运算符 | 说明 |
---|---|---|
13 | -, + | 负、正 |
12 | !, ~ | 逻辑非,按位取反或补码 |
11 | *, /, % | 乘、除、取模 |
10 | +, - | 加,减 |
9 | <<, >> | 按位左移,按位右移 |
8 | <=, >=, <, > | 小于等于,大于等于,小于,大于 |
7 | ==, != | 等于,不等于 |
6 | & | 与 |
5 | ^ | 异或 |
4 | ¦ | 或 |
3 | && | 逻辑与 |
2 | ¦ | 逻辑或 |
1 | =, +=, *=, /=, %=, &=, ^=, ¦ | 赋值,运算且赋值 |
运算符:
- 方法四
第三、四种方法,加号两侧加不加空格都可以,所以比较推荐这两种方式
- 方法三
注意,$a + $b
加号两侧必须加空格,否则不会进行数值运算。
- 方法二
这里声明变量a
和变量b
的时候并未指定数据类型,但是指定了变量c
的数据类型为整形,那么Shell会自动认为a
和b
也是整形,然后进行整数运算。