一、数组的定义
数组就是将相同数据类型的元素按照一定顺序排列的集合。常用的定义一个数组有两种方式:
- array=(1 2 3)
- array=($(ls))
其中第一种是已知元素组成的元组,外面使用括号,里面元素之间使用空格隔开;第二种方式是元素未知,通过命令获取。
[root@localhost ~]# array=(1 2 3)
二、数组基本操作
数组得而基本操作无非就是增、删、改、查,其中查用的是最多的。
1、查
数组的查询是用的最多的操作,包括:
- 获取数组的所有元素
- 获取数组的某个元素
- 获取数组的长度
...
[root@localhost ~]# array=(1 2 3) # 通过*、@获取数组的所有元素 [root@localhost ~]# echo ${array[*]} 1 2 3 [root@localhost ~]# echo ${array[@]} 1 2 3 # 通过索引获取数组的单个元素 [root@localhost ~]# echo ${array[0]} 1 [root@localhost ~]# echo ${array[1]} 2 # 获取数组的长度 [root@localhost ~]# echo ${#array[*]} 3 [root@localhost ~]# echo ${#array[@]} 3
2、增、改
直接通过数组下标对其进行引用赋值,如果下标存在就会对其进行修改,如果下标不存在就对数组添加新的元素。
[root@localhost ~]# array=(1 2 3) # 添加新元素 [root@localhost ~]# array[3]=4 [root@localhost ~]# echo ${array[3]} 4 # 修改元素 [root@localhost ~]# array[0]=a [root@localhost ~]# echo ${array[0]} a [root@localhost ~]# echo ${array[*]} a 2 3 4
3、删
通过unset array[index] 进行相应的元素清除,如果不带index清除的就是整个数组。
[root@localhost ~]# array=(1 2 3) # 清除最后一个元素 [root@localhost ~]# unset array[2] [root@localhost ~]# echo ${array[*]} 1 2 # 清除整个数组 [root@localhost ~]# unset array [root@localhost ~]# echo ${array[*]}
三、进阶操作
数组也是变量,因此也适用于变量子串的操作:
- 截取
- 替换
- 删除
1、截取
# 截取下标1-3元素 [root@localhost ~]# echo ${array[@]:1:3} 2 3 4 # 截取下标1之后的所有元素 [root@localhost ~]# echo ${array[@]:1} 2 3 4 5
2、替换
# 把数组中的元素1替换为a,注意的是原数组并没有更改 [root@localhost ~]# echo ${array[@]/1/a} a 2 3 4 5 [root@localhost ~]# echo ${array[@]} 1 2 3 4 5
3、删除
[root@localhost ~]# array=(welcome to here) # 从开始最短匹配删除 [root@localhost ~]# echo ${array[@]#t} welcome o here # 从结尾最短匹配删除 [root@localhost ~]# echo ${array[@]%e} welcom to her
四、实战
- 循环打印数组元素
#!/bin/sh array=(1 2 3 4 5) for((i=0;i<${#array[@]};i++)) do printf "${array[$i]} " done
- 循环打印文件夹下的文件
#!/bin/sh dir_path=/project/scripts/testDir array=($(ls $dir_path)) for file in ${array[*]} do echo $file done