目录
频道首页
📚shell脚本数组
收藏
0
xy20118 最近修改于 2024-06-10 23:40:46

前言

image

什么是数组?

数组(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
内容大纲
批注笔记
📚shell脚本数组
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板