【前端&运维那点事儿】八:迈向Shell的第四步:算数运算与数组

1,021 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~

🍇 写在前面

先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。

这篇文章是Shell篇的第四篇文章,在这篇文章中将来介绍一下declare命令、算术运算以及数组的相关内容。

🥝 declare命令

在开始之前,我们前补充一个命令,就是declare命令,该命令的作用是用来定义变量。

该命令的语法如下:

declare [+/-] [aAfFgilprtux] [变量名=变量值]

其中选项如下所示:

选项含义
-f [name]列出之前由用户在脚本中定义的函数名称和函数体。
-F [name]仅列出自定义函数名称。
-g name在Shell函数内部创建全局变量。
-p [name]显示指定变量的属性和值。
-a name声明变量为普通数组。
-A name声明变量为关联数组(支持索引下标为字符串)。
-i name将变量定义为整数型。
-r name[=value]将变量定义为只读(不可修改和删除),等价于 readonly name
-x name[=value]将变量设置为环境变量,等价于export name[=value]

示例代码如下:

[root@ywanzhou ~]$ declare -i num=10+20 # 将 num 设置为整数类型的变量
[root@ywanzhou ~]$ echo $num            # 输出两个数相加的和
30
[root@ywanzhou ~]$ num=10+50
[root@ywanzhou ~]$ echo $num
60
[root@ywanzhou ~]$ declare +i num      # 删除整型属性
[root@ywanzhou ~]$ num=10+20           # 输出字符串拼接
[root@ywanzhou ~]$ echo $num
10+20

🍍 算术运算

在Shell中要进行算数运算,语法格式如下:

$((expression)) # expression 为算术表达式

Shell同其他编程语言一样,Shell也具有很多算术运算符,如下表所示

算术运算符说明/含义
+、-加法(或正号)、减法(或负号)
*/%**乘法、除法、取余、幂运算
++--自增和自减,可以放在变量的前面也可以放在变量的后面,两者的区别同JS。
!&&丨丨逻辑非(取反)、逻辑与(and)、逻辑或(or)
<<=>>===!==比较符号
<<>>向左移位、向右移位
~、 &^按位取反、按位或、按位与、按位异或
=+=-=*=/=%=赋值运算符

示例代码如下:

[root@ywanzhou ~]$ n1=100
[root@ywanzhou ~]$ n2=10
[root@ywanzhou ~]$ echo $((n1+n2))   # 计算两个的和
110
[root@ywanzhou ~]$ echo $((n1--))    # 自减 先返回再减
100
[root@ywanzhou ~]$ echo $n1
99
[root@ywanzhou ~]$ echo $((++n2))    # 自增 先增在返回
11

🍐 数组

🍓 数组的定义与修改

在Shell中还可以定义数组,语法有两种:

第一种直接使用索引的方式定义,示例如下:

[root@ywanzhou ~]$ arr[0]=100
[root@ywanzhou ~]$ arr[1]=一碗周
[root@ywanzhou ~]$ arr[2]=https://github.com/ywanzhou
[root@ywanzhou ~]$ echo ${arr[0]} ${arr[1]} ${arr[2]}
100 一碗周 https://github.com/ywanzhou

使用索引定义也可以使用索引访问。

第二种就是使用括号()来表示数组,数组元素之间用空格来分隔。示例如下:

[root@ywanzhou ~]$ arr2=(100 一碗周 https://github.com/ywanzhou)
[root@ywanzhou ~]$ echo ${arr2[0]} ${arr2[1]} ${arr2[2]}
100 一碗周 https://github.com/ywanzhou

如果想要访问数组中的所有元素可以使用@或者*,示例如下:

[root@ywanzhou ~]$ echo ${arr2[*]}
100 一碗周 https://github.com/ywanzhou
[root@ywanzhou ~]$ echo ${arr2[@]}
100 一碗周 https://github.com/ywanzhou

下面展示了如何合并数组以及获取数组的长度:

[root@ywanzhou ~]$ array1=(一碗周 github)
[root@ywanzhou ~]$ array2=(地址 https://github.com/ywanzhou)
[root@ywanzhou ~]$ array3=(${array1[*]} ${array2[@]}) # 合并数组
[root@ywanzhou ~]$ echo ${array3[@]}
一碗周 github 地址 https://github.com/ywanzhou
[root@ywanzhou ~]$ echo ${#array3[@]}   # 获取数组长度
4

🍒 数组的删除

删除数组或者删除数组的元素直接使用unset命令即可,如下所示:

[root@ywanzhou ~]$ unset array1[0]    # 删除数组中索引为1的元素
[root@ywanzhou ~]$ echo ${array1[*]}  # 验证是否删除成功
github
[root@ywanzhou ~]$ echo ${array2[*]}
地址 https://github.com/ywanzhou
[root@ywanzhou ~]$ unset array2       # 删除数组中索引为1的元素
[root@ywanzhou ~]$ echo ${array2[*]}  # 删除打印内容为空

🍑 写在最后

本篇文章到这就结束了,这篇文章中介绍了Linux中的declare命令、Shell中如何进行算数运算以及Shell中的数组。

如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~