shell脚本之数组

94 阅读2分钟

数组

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

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

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

Shell中,数组用括号来表示,元素用"空格"符号分隔开。

数组包括的数据类型:

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

定义数组

一:

数组名=(value0 value1 value2 ...)

二:用过下标值定义每个元素

数组名=([0]=value [1]=value [2]=value ...)

三:先定义列表,再引用列表的值定义数组

列表名="value0 value1 value2 ..."

数组名=($列表名)

四:

通过下标值,一个一个定义数组内的每个元素。

同时也可以通过这种方式修改元素的值。

数组名[0]="value"

数组名[1]="value"

数组名[2]="value"

引用数组的值

获取数组的数据列表

echo {数组名\[@\]} 或 echo {数组名[*]}

查看组内某一元素的值

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

获取数组长度

echo ${#数组名[*]} 

 echo ${#数组名[@]}

查看数组内最后一个元素的值

echo ${array[-1]} //获取最后一个元素的值 

 echo ${array[-2]} //获取倒数第二个元素的值

或者用数组长度减一

用这种方式查看最后一个元素值,可以判断这个数组的下标是不是完整的。因为如果中间跳过了一个下标,那么此种方法无法获取最后一个元素的值。

数组的常用操作

数组切片

${数组名[@]:起始位置:截取长度}    #起始位置从0开始算起

例:

数组替换

临时替换:

echo ${数组名[@]/旧字符/新字符}  #不会改变数组原有内容

例:

永久替换(重新赋值)

数组名=(${数组名[@]/旧字符/新字符})

删除数组

1.删除某个元素

unset 数组名[n]   #n为下标值

2.删除整个数组

unset 数组名[@]    #@或*

数组追加元素

#方法1        数组名[n]=元素值       //使用下标值直接增加元素 ​

#方法2       数组名+=(元素1 元素2 .....) ​

#方法3       数组名[数组长度]=元素值          //此种方法必须保证数组元素是完整的,如果某个下标被跳过了,此种方法会替换掉原来的某个元素 ​

#方法4        数组名=("${数组名[@]}" 元素1 元素2 .....)

注意:待添加元素必须用()包围起来,并且多个元素用”空格“分隔

引用数组值必须加双引号,不然原数组内有空格的单个元素(例如"zhang san")会被当成2个元素。 

且必须使用@,因为加上双引号之后"@"表示将所有参数当作个体,而@"表示将所有参数当作个体,而*表示将所有参数当作一个整体。

使用for遍历输出数组的每个元素值

将数组的值传给函数

1.向函数传入数组的时候需要先把数组转换成列表作为函数的参数使用

函数名 ${数组名1[@]}

2.在函数内把传入的列表重新组合成数组

数组名2=($@)

3.在函数外重新组合成数组

数组名3=(`函数名 ${数组名1[@]}`)

例1:获取数组的数据列表作为函数的参数使用

例2:使用for循环,令新数组内的每个元素值乘2