shell脚本之数组和冒泡排序

本文介绍了Bash Shell中的数组概念,包括如何定义、读取、遍历、删除和追加元素。此外,还详细讲解了冒泡排序的实现过程,通过示例展示了如何对数组进行排序。对于数组,强调了其一维特性、下标从0开始以及如何进行切片和替换操作。同时,文章提供了具体的代码示例,帮助读者更好地理解和应用Shell脚本中的数组功能。
摘要由CSDN通过智能技术生成

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

image-20220712141510641

image-20220712141548012

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

image-20220712141701704

image-20220712141720509

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

image-20220712143012451

#定义一个变量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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值