数组格式
普通数组下标是数字
关联数组下标是字符串
例子:
a=(10 20 30 40 50)
a[0] 10
数组的分类(普通数组和关联数组)
普通数组
可以不需要手动声明,直接使用
declare -a 数组名
关联数组
一定要手动声明
adeclare -A 数组名
定义数组
1.数组名=(数值1 数值2 数值3 ...数值n)数值之前用空格隔开
2.单个赋值:
数组名[0]=值1
数组名[1]=值2
数组名[2]=值3
变量和数组
变量:只存储一个值,(一对一)
数组:相当于多个变量的数据集合(一对多)
调用数组(单个调用、
举例a是数组名
单个调用
echo ${a[0]}#调用第一个值
echo ${a[1]}#调用第二个值
……………………………………
echo ${a[n]}#调用第n个值
 cd /opt   
a=(*.sh)    #hh=当前文件夹下的以.sh结尾的
echo ${a[0]} #调用第一个.sh结尾的值
echo ${!a[@]}  #显示所有多少下标(追加的时候看一下有哪些下标,防止搞混)
 
 
全部调用
echo ${a[@]}
echo ${a[*]}
显示数组的值的个数
echo ${#a[@]}
显示所有下标
echo ${!a[@]}
删除数组
unset 数组名 # 将整个数组删除
unset a[0] #只删除数组的第一个值
关联数组(要先手动声明)
 declare -A f   #先声明f
f[name]=hyh
f[address]=nj
f[p]=3
echo ${f[p]}
3
echo ${f[address]}
nj
echo ${f[name]}
hyh 
 
 
数组切片
 ${ARRAY[@]:offset:number}
offset #要跳过的元素个数
number #要取出的元素个数
#取偏移量之后的所有元素 
{ARRAY[@]:offset}
[root@centos8 ~]#num=({0..10})
[root@centos8 ~]#echo ${num[*]:2:3}
2 3 4
[root@centos8 ~]#echo ${num[*]:6}
6 7 8 9 10 
 
 
数组遍历
 for i in ${a[@]}
do 
echo $i
done 
 
数组之冒泡排序
原理:
数组中相邻两个数进行比较,不满足条件就交换。
以对0-9这10个数来进举例。
eg:对9 8 7 6 5 4 3 2 1 0进行升序。
思路:
首先让9与8进行比较,9比8大,故9与8交换位置,在让9与7将进行比较,以此类推,比较玩的数组变为8 7 6 5 4 3 2 1 0 9,,这称为一趟冒泡排序。同理,让8在与后面的数进行比较,最终完成升序,10个元素进行冒泡排序,共需9趟排序,思路确定后,接下来我们来编写代码。
示例题:在0-3万的随机数中随机生成十位不同的数并排序
 #!/bin/bash  
for i in {0..9}   #生成一个随机数组{从0到9}
doa[$i]=$RANDOM   #数组的值为0-3万的随机数
done
echo"原始数组为:${a[@]}"
l=${#a[@]}              #定义变量l为数组a的长度10
for((i=1;i<$l-$i;i++))  #需要比较的轮次
dofor((j=0;j<$i))  #相邻的数需要比较的次数dofirst=${a[$j]}   #数组的第一个数k=$[$j+1]#计算数组下一个数的下标second=${a[$k]}#下一个数if[ $fire -gt $second ]thentemp=$firsta[$j]=$seconda[$k]=$tempfidone
done
echo"${原始数组为a[@]}"