数组格式
普通数组下标是数字
关联数组下标是字符串
例子:
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[@]}"