数组:数字组成的组,组里可以是int类型,string字符串
数组当中的数据类型可以由用户自定义,既可以是同一种,也可以是不同的数据类型组成的元素集合。数组最大的作用:可以一次性定义多个变量
在shell中创建数组的方法有以下三种:
直接添加数组:
通过数组的下标索引进行添加数组:
通过数组的索引一个个添加数组:
直接定义一个元素将
删除整个数组为:unset 数组名
删除单个指定的元素:unset gsn[1]
数组的切片
格式:
${数组名[@或*]}:起始位置(起始索引):长度
分号第一个数字代表:索引位置从哪开始
分号第二个数字代表:从该位置起到第几都将切出来
如:
[root@localhost opt]# echo ${gsn[*]:1:3}
2 3 4
[root@localhost opt]# echo ${gsn[*]:0:3}
1 2 3
数组的替换
将数组中某几个元素替换的操作,可分为临时替换、永久替换
临时替换:
格式:echo ${gsn[*]/4/66}
将数组中第四个位置的索引替换为“66”
永久替换:
格式:gsn=($gsn[*]/4/66)
永久替换数组中的元素,需要重新定义数组才能永久修改
追加数组元素
在原有数组的基础上再添加元素,方法有以下三种:
gsn[5]=12
根据索引下标进行追加,如当前索引下有元素则是替换,没有则是追加
gsn [ $ { # gsn[ * ] } ]=6
常用的一种方式
gsn+=(8 9) echo ${ gsn[ * ] }
更加直观的方式,直接在末尾追加元素,无需根据索引下标
数组的应用
数组一般与函数相结合使用,数组中的数据作为参数,传参给函数进行运算
#函数调用数组传参数
ky30 () {
abc=($(echo $@ ))
echo "数组值为:${abc[*]}"
}
abc1=(`seq 1 10`) #seq自动生成排序
ky30 ${abc1[*]}
冒泡排序
冒泡排序原理,将数组中的元素由从大到小或从小到大的顺序进行排序,运算顺序是每两个元素进行比较大小,小的向前移大的向后移;依次进行下去,直到排序完成。
冒泡排序需要运用双重for循环来实现,外层的大循环控制整个循环的次数,里面的小循环控制元素大小进行排序,下面将实现从小到大排序的命令过程。
[root@localhost opt]# vim maopao.sh
abc=(20 10 60 40 50 30)
echo "原数组的排列顺序为:${abc[*]}"
length=${#abc[*]} #定义数组的长度
for ((i=1;i<$length;i++)) #总共比5次
do
for ((k=0;k<$length-i;k++))
do
first=${abc[$k]} #定义第一个元素的值
j=$(($k+1)) #定义第二个元素的索引号
second=${abc[$j]} #定义第二个元素的值
if [ $first -gt $second ]
then
temp=$first #把第一个元素的值,保存在临时变量temp中
abc[$k]=$second #把小的值往前放
abc[$j]=$first #把大的值往后放
fi
done
done
echo "排序后的数组排序为:$"