DAY36 shell数组

123 阅读2分钟

何为数组

数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。

组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

用于区分数组的各个元素的数字编号称为下标。元素的下标从0开始。

数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由 0 开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

编辑数组

数组包括的数据类型:

  • 数值型
  • 字符型 (如果元素值为字符类型,需要加单引号或双引号,防止单个元素中有空格被当成2个元素)
  • 混合型数值加字符

类型一

数组名=(value1 value2 value3 value4)

image.png

类型二

我们定义一个列表,在用数组引用列表

 列表名="value1 value2 value3 value4"
 数组名=($列表名)
 

image.png

类型三

用下标值定义每个元素

 数组名=([0]=value1 [1]=value2 [2]=value3)

image.png

引用数组

1.获取数组的数据列表(所有的值)

 echo ${array[@]}echo ${array[*]}
 
 

image.png

2.查看数组内某一个元素的值

 ${数组名[n]}   ##n代表元素的下标

echo ${array[0]}  ##下标从0开始,故获取数组内第一个元素的值

echo ${array[1]}  ##获取数组内第二个元素的值,下标为1

image.png

数组分片

${数组名[@]:起始位置:截取长度}

${数组名[@]}    ##获取整个数组的元素

${数组名[@]:0:3} ##获取从0开始共截取三个元素

${数组名[@]:2:2}  ##获取从2开始共截取二个元素


image.png

删除数组

1.删除组内某个元素

unset 数组名[n]  ##删除组内某个元素


image.png

删除一个数组

unset 数组名 [*]
或
unset 数组名 [@]

image.png

数组扩增(增加组内元素)

当我们原本定义的数组不能满足我们的需求时,我们需要追加数组内的元素。

数组名[n]=元素值  ##直接使用下标值添加元素
或

数组名+=(元素1 元素2 ....)
或

数组名[数组长度]=元素值  ##此方法必须保证数组是完整的
或   

数组名=("${数组名[@]}" 元素1 元素2 ...)  ##   引用数组值必须加双引号,不然原数组内有空格的单个元素(例如"zhang san")会被当成2个元素
##且必须使用@,因为加上双引号之后"$@"表示将所有参数当作个体,而$*表示将所有参数当作一个整体。

image.png

image.png

image.png

遍历数组

1.通过数组内所有元素来遍历

image.png

通过下标值来遍历

image.png

将数组的值传参函数

实验1:获取数组列表传参给函数使用

image.png

image.png

实验2:令数组内每个元素乘2并列出

image.png

image.png

实验3:求出数组累加和

image.png

image.png