shell脚本之数组和冒泡排序
数组的定义
数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
- 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
- 数组元素的下标由 0 开始。
- Shell 数组用括号来表示,元素用"空格"符号分割开
- 在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
数组的分类
普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 value2 ... valuen)
[root@sdh data]#a=(1 2 3 4 5)
[root@sdh data]#echo ${a[@]}
1 2 3 4
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
[root@sdh data]#b=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5)
[root@sdh data]#echo ${b[@]}
1 2 3 4 5
数组名[0]="value"
数组名[1]="value"
数组名[2]="value
[root@sdh data]#c[0]=1
[root@sdh data]#c[1]=2
[root@sdh data]#c[3]=3
[root@sdh data]#c[4]=4
[root@sdh data]#echo ${c[@]}
1 2 3 4
读取数组
读取数组元素值的一般格式是:
${array_name[index]}
获取数组的数据列表
echo ${数组名[*]}
echo ${数组名[@]}
取数组长度
echo ${#数组名[*]}
echo ${#数组名[@]}
*获取数组下标对应的值*
数组名=(元素0 元素1 元素2 ……) 定义数组
echo ${数组名[索引值]} 输出数组索引值对应的元素,索引值为从0开始
数组的常用操作
#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${a[@]}
do
echo $i
done
数组切片
a=(0 1 2 3 4 5 6 7 8)
echo "输出整个数组: " ${a[@]}
echo "取出数组1到3: " ${a[@]:1:3}
echo "取出数组5到后面所有的元素: " ${a[@]:5:5}
数组的替换
#临时替换
[root@sdh data]#echo ${a[@]/4/6}
#重新赋值,可以永久修改
[root@sdh data]#a=(${a[@]/4/7})
数组的删除和指定下标的值删除
echo ${a[@]}
0 1 2 3 4 5 6
unset a #删除整个组
unset a[2] #删除第三个元素,下标为2的
数组追加元素
直接使用下表进行元素的追加
数组名[下标]=变量
将数组的长度作为下标进行追加元素
数组名[${#数组名[@]}]=变量名
使用+=进行追加
数组名+=(变量1 变量2 ...)
查看所有的数组 declare -a
冒泡排序
<span style="background-color:#f8f8f8"><span style="color:#333333">#!/bin/bash
#排序之前的数组顺序
a=(10 40 33 30 77 66 44 )
#确定循环比较的次数
for ((j=1;j<${#a[@]};j++))
do
#对比获取每次的最大元素的索引位置
for ((i=0;i<${#a[@]}-j;i++))
do
#如果对比出最大元素,就把该元素赋值给后面的变量tmp
if [ ${a[$i]} -gt ${a[$i+1]} ]
then
#定义一个变量tmp,将每次比较的最大数值放进tmp,实现变量对换
tmp=${a[$i+1]}
a[$i+1]=${a[$i]}
a[$i]=$tmp
fi
done
done
echo ${a[*]}
</span></span>
#定义一个变量tmp,将每次比较的最大数值放进tmp,实现变量对换
tmp=KaTeX parse error: Expected '}', got 'EOF' at end of input: {a[i+1]}
a[
i
+
1
]
=
i+1]=
i+1]={a[KaTeX parse error: Expected 'EOF', got '}' at position 3: i]}̲ a[i]=$tmp
fi
done
done
echo ${a[*]}
[外链图片转存中...(img-vDsXbbGH-1657607470678)]
![image-20220712143029943](https://img-blog.csdnimg.cn/img_convert/2f029c00e425b566f224af906ea1d5f0.png)