目录
一:数组定义方法
1、方法一
2、方法二
3、方法三
4、方法四
5、判断数组是否完整
(1)方法一
(2)方法二:通过脚本
二:获取数组值
1、获取数组长度
2、获取数组数据列表
3、获取数组下标列表
4、读取某下标赋值
5、数组遍历
6、求数组所有的数值的和
三:数组值的改变
1、数组切片
2、数组替换
(1)临时替换,数组根本不会替换
(2)永久替换需重新赋值
3、数组删除--unset
4、数组追加元素
(1)方法一
(2)方法二
(3)方法三
(4)方法四
四:数组传参
1、数组传参
2.、从函数返回数组
五:数组排序算法
1、冒泡排序介绍
2.、冒泡排序事例
一:数组定义方法
1、方法一
数组名=(value0 value1 value2…)
2、方法二
数组名=([0]=value [1]=value [2]=value…)

3、方法三
数组名=“value0 value1 value2…”
数组名=($列表名)
4、方法四
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
数组名[3]=“value”
5、判断数组是否完整
思路:通过数组最后一位与列表最后一位进行比对
(1)方法一
(2)方法二:通过脚本
[root@localhost ~]# vim test.sh
#!/bin/bash
a5=([0]=10 [1]=20 [3]=40 [4]=50) #定义数组
length=${#a5[@]} #定义数组的长度
lastnum=$[length - 1] #定义最后一位数的下标,长度减一
lastone=${a5[$lastnum]} #定义下标
curlast=$(echo ${a5[@]} | awk '{print $NF}') #定义最后一个字段
echo "a5数组的值为:${a5[@]}"
if [ $lastone -eq $curlast ];then #判断最后一位数值是否相等
echo "a5数组是完整的!" #相等则输出完整
else
echo "a5数组缺失元素!" #不相等则输出缺失
fi
二:获取数组值
1、获取数组长度
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# echo ${#a1[@]}
6
[root@localhost ~]# echo ${#a1[*]}
6
2、获取数组数据列表
[root@localhost ~]# echo ${a1[*]}
10 20 30 40 50 60
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
3、获取数组下标列表
[root@localhost ~]# echo ${!a1[@]}
0 1 2 3 4 5
4、读取某下标赋值
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# bl=${a1[3]}
[root@localhost ~]# echo $bl
40
5、数组遍历
[root@localhost ~]# for i in ${a1[@]}
> do
> echo $i
> done
10
20
30
40
50
60
6、求数组所有的数值的和
[root@localhost ~]# for i in ${a1[@]}
> do
> sum=$[sum + i]
> done
[root@localhost ~]# echo $sum
210
三:数组值的改变
1、数组切片
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# echo ${a1[@]:0:2} #0为第一下标位,2为长度,2个字符
10 20
[root@localhost ~]# echo ${a1[*]:3:3} #3为第三下表位,3为长度,3个字符
40 50 60
2、数组替换
(1)临时替换,数组根本不会替换
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# echo ${a1[@]/30/100}
10 20 100 40 50 60
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# echo ${a1[@]/0/5}
15 25 35 45 55 65
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
(2)永久替换需重新赋值
[root@localhost ~]# a6=(10 20 30 40 50 100)
[root@localhost ~]# echo ${a6[@]}
10 20 30 40 50 100
[root@localhost ~]# b1=${a6[@]/10/60} #将原数组的数据替换重新赋值一个新变量
[root@localhost ~]# echo ${b1[@]}
60 20 30 40 50 600 #100会认为10和0,所有也会替换
3、数组删除--unset
[root@localhost ~]# echo ${a1[@]}
10 20 30 40 50 60
[root@localhost ~]# unset a1[3] #删除数组下标位3的数值
[root@localhost ~]# echo ${a1[@]}
10 20 30 50 60
[root@localhost ~]# unset a1 #删除数组
[root@localhost ~]# echo ${a1[@]}
4、数组追加元素
(1)方法一
格式:数组名[下标位]=元素值
[root@localhost ~]# echo ${a2[@]}
20 30 50 10 40
[root@localhost ~]# a2[5]=77
[root@localhost ~]# echo ${a2[@]}
20 30 50 10 40 77
(2)方法二
格式:数组名[${数组名[@]}]=数值
[root@localhost ~]# echo ${a2[@]}
20 30 50 10 40 77
[root@localhost ~]# a2[${#a2[@]}]=88
[root@localhost ~]# echo ${a2[@]}
20 30 50 10 40 77 88
数组完整时,会在数组最后一位追加
数组不完整时,会替换最后一位数值
(3)方法三
格式:数组名=("${数组名[@]}" 元素值 ...)
注:双引号不能省略,否则,当数组中存在空格的元素时会按空格将元素拆分成多个
不能将“@”替换成“*”,如果替换为“*”,不加双引号时与“@”的表现一致,加双引号时,会将数组中的所有元素作为一个元素添加到数组中。
单引号时
双引号时
(4)方法四
格式:数组名+=("元素名" "元素名")
四:数组传参
1、数组传参
[root@localhost ~]# vim abc.sh
#!/bin/bash
test() {
one=($@)
echo "函数内的数组的元素列表为:${one[@]}"
echo $1
echo $2
echo $3
echo $4
echo $5
}
two=(11 22 33 44 55)
echo "函数外的数组的元素列表为:${two[@]}"
test ${two[@]}
2.、从函数返回数组
[root@localhost ~]# vim acc.sh
#!/bin/bash
test1() {
one=($@) #函数内的数组的元素列表为${one[@]}
for ((i=0;i<${#one[@]};i++)) #i小于${one[@]}所包含的数值个数,循环一次自加一
do
one[$i]=$[2 * ${one[$i]}] #定义新的数组值为原来数组值的2倍
done
echo ${one[@]}
}
two=(11 22 33 44 55)
echo "函数体外的数组的元素列表为:${two[@]}"
arr=($(test1 ${two[@]})) #调用函数
echo "新的数组值为:${arr[@]}"
五:数组排序算法
1、冒泡排序介绍
类似气泡上涌的动作,会将数据在数组中从大到小或者从小到大不断的向前移动。
2.、冒泡排序事例
[root@localhost ~]# vim mpao.sh
#!/bin/bash
MAOPAO(){
arr=($@)
#获取数组的长度
length=${#arr[@]}
#外层循环用来定义比较轮数,比较轮数为数组长度减1,且从1开始
for ((a=1;a<length;a++));do
#内层循环用来确定比较元素的位置,比较相邻两个元素,较大的元素往后移,并且比较次数会随着比较轮数的增加而减少
for ((b=0;b<length-a;b++));do
#获取相邻两个元素的前面元素的值
first=${arr[$b]}
#获取相邻两个元素的后面元素的值
c=$[b + 1]
second=${arr[$c]}
#比较两个相邻元素的值大小,如果前面元素的值较大,则与后面元素交换位置
if [ $first -lt $second ];then
#使用临时变量保存前面元素的值,实现两个相邻元素交换位置
tmp=$first
arr[$b]=$second
arr[$c]=$tmp
fi
done
done
echo "冒泡排序后的数组的值为:${arr[@]}"
}
#### main ####
read -p "请输入一组列表:" num
array=($num)
echo "旧数组的值为:${array[@]}"
MAOPAO ${array[@]}