shell脚本之数组和冒泡排序

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

shell脚本之数组和冒泡排序_第1张图片

shell脚本之数组和冒泡排序_第2张图片

数组切片

a=(0 1 2 3 4 5 6 7 8)
echo "输出整个数组: " ${a[@]}
echo "取出数组1到3: " ${a[@]:1:3}
echo "取出数组5到后面所有的元素: " ${a[@]:5:5}

shell脚本之数组和冒泡排序_第3张图片

shell脚本之数组和冒泡排序_第4张图片

数组的替换

#临时替换
[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

冒泡排序

#!/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[*]} 

shell脚本之数组和冒泡排序_第5张图片

#定义一个变量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)

你可能感兴趣的:(linux)