Shell之数组

一、数组的定义

数组就是将相同数据类型的元素按照一定顺序排列的集合。常用的定义一个数组有两种方式:

  • 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
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/shenjianping/p/14385506.html