频道首页
目录
📚shell脚本数组
收藏
0
前言
什么是数组?
数组(Array)相当于一些元素的集合,可以从中拿取相关的元素数据,将内容放在( )小括号里面,数组之间的元素使用空格来分隔,下标从0开始。
数组分类
普通数组:下标数是数值 默认普通数组 关联数组:下标是有含义的字符 要先声明(declare -A 数组名) 我是关联数组
declare -A assoc_array
关联数组和普通数组的主要区别在于,关联数组的索引可以是任何字符串,而普通数组的索引只能是整数。另外,关联数组的性能可能会稍微差一些,因为它需要额外的散列计算。在实际使用时,应根据具体需求选择合适的数组类型。
- 变量:存储单个元素的内存空间
- 数组:存储多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引
- 索引的编号从0开始,属于数值索引
- 索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash 4.0版本之后开始支持
- bash的数组支持稀疏格式(索引不连续)
定义数组的方法
shell中,数组使用( )来表示 ,元素使用空格 符号分开。 数组的包括数据类型
- 数值型
- 字符型
- 混合型数值加字符
使用" "或' '定义双引号或单引号括起来 1.
数组名=(value0 value1 value2 value3 ......)
2.使用下标值定义元素
数组名=([0]=value [1]=value1 [2]=value2 ....)
3.先定义列表名 再定义数组名
列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
4.通过下标值定义 一个一个定义数组内元素 同下标值重新定义可以修改之前的数值元素
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
数组值的调用
1.获取数组的数据列表(所有元素的值)!!#ffff00 echo ${数组名[@]}!! 显示下所有标值 !!#ffff00 echo ${!a[*]}!!
[root@c1 ~]# a=(a b c d )
[root@c1 ~]# a
bash: a: 未找到命令...
[root@c1 ~]# echo ${a[@]} #显示数组的数据列表
a b c d
[root@c1 ~]# echo ${a[*]} #显示所有数组元素
a b c d e
[root@c1 ~]# a[5]="e" #根据下标值追加数据 给数组
[root@c1 ~]# echo ${a[@]}
a b c d e
[root@c1 ~]# echo ${!a[*]}
0 1 2 3 5
2.按照下标值获取数组内的对应元素 !!#ffff00 echo ${数组名[下标值]}!!
[root@c1 ~]# echo ${a[3]}
d
3.数组长度显示 echo ${#数组名[*或者@]}
[root@c1 ~]# echo ${#a[*]}
5
[root@c1 ~]# echo ${#a[@]}
5
4.数组分割 ${数组名[@]:n:截取长度} n是下标值
[root@c1 ~]# echo ${a[@]} #显示所有数组元素
a b c d e
[root@c1 ~]# echo ${!a[*]} #显示下标值
0 1 2 3 5
[root@c1 ~]# echo ${a[@]:0:3} #从下标值0开始 取三个元素显示
a b c
5.数组替换 (永久替换) 数组名=(${数组名[@]/旧字符/新字符})
[root@c1 ~]# a=({1..10})
[root@c1 ~]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@c1 ~]# a=(${a[@]/5/66}) #数组a中元素5 永久替换为66
[root@c1 ~]# echo ${a[@]}
1 2 3 4 66 6 7 8 9 10
6.查看所有数组数据 declare -a
[root@c1 ~]# declare -a |grep 数组名 #可以过滤出对应数组名的数组
实际应用
数组元素导入新数组后 求出累计和。 比如a数组元素11 22 33 44 55 66 导入b数组后 并求出累计和。
#!/bin/bash
my () {
b=($@)
sum=0
for i in ${b[@]}
do
sum=$[sum+i]
done
echo "b数组和是:$sum"
}
a=(11 22 33 44 55 66)
my ${a[@]}
[root@c1 ~]# bash qh.sh
b数组和是:231
主页
会议室
Git管理
文章
云文档
看板