shell脚本中数组的运用
- 一、数组的介绍
- 1、概念
- 2、定义方法
- 3、数组包括的数据类型
- 二、关于数组的操作
- 1、获取数组长度
- 2、获取数组各个元素的下标
- 3、获取数组列表或单个元素
- 4、对数组切片输出
- 5、对数组里的元素替换
- 6、删除单个元素或数组
- 7、数组追加元素
- 8、向函数传入数组的值
- 三、数组排序算法之冒泡排序
- 1、基本思想
- 2、算法思路
- 3、实现
一、数组的介绍
1、概念
数组:数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用。
2、定义方法
方法一):
数组名=(value0 value1 value2 ....)
方法二):
数组名=([0]=value [1]=value [2]=value ...)
方法三):
列表名=“value0 value1 value2 ....”
数组名=($列表名)
方法四):
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
3、数组包括的数据类型
- 数值类型
- 字符类型
字符类型要是应用双引号或单引号定于
二、关于数组的操作
1、获取数组长度
a=(1 2 3 4 5)
b=${#a[*]}
或
b=${#a[@]}
2、获取数组各个元素的下标
echo ${!a[@]}
或
echo ${!a[*]}
3、获取数组列表或单个元素
#获取数组列表
echo ${a[*]}
或
echo ${a[@]}
#获取单个元素
echo
4、对数组切片输出
#将i数组的33 44 55输出
i=(11 22 33 44 55)
echo ${i[@]:1:3}
5、对数组里的元素替换
a=(10 20 30 40 100)
echo ${a[@]/10/60} //此方法替换只是输出时替换,但原数组并没有被替换
#永久替换相当于重新定义数组
b=(1 2 3 4 5)
b=(${b[@]/2/6})
echo ${b[@]}
6、删除单个元素或数组
#删除单个元素
c=(1 2 3 4 5 6)
echo ${!c[@]}
unset c[5]
echo ${c[@]}
#删除数组
unset c
echo ${c[@]}
注意:如果下标为0 1 2 3 4,把3删除了,下标就变成了0 1 2 4,不是0 1 2 3。
7、数组追加元素
方法一)
array_name[index]=value
方法二)
array_name[${#array_name[@]}]=value
方法三)
array_name=("${array_name[@]}" value1 ... valueN)
#双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个。不能将"@"替换成“*”,不加双引号时与“@”表现一致,加双引号时,会将数组array_name中所有的元素作为一个元素添加到数组中
方法四)
array_name+=(value1 value2 ... valueN)
待添加元素必须用“()”包围起来,并且多个元素用空格分隔
方法一:
方法二:
方法三:
方法四:
8、向函数传入数组的值
三、数组排序算法之冒泡排序
冒泡排序:类似于气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
1、基本思想
冒泡排序的基本思想时对比相邻的两个元素值,如果满足条件iu交换元素,把较小的元素移动到数组前面,把大的元素移动到数组的后满(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
2、算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小以确定是否交换位置,对比和交换次数随排序轮数而减少。
3、实现