shell 数组

对数组的增删改查

冒泡排序

数组:是由多个元素组成的一个集合

int string 浮点

数组的主要作用就是可以一次性的定义多个变量,不需要我们人工依次声明

a=1

b=2

直接在数组里面定义好变量


定义数组(数组的创建方式)

第一种方式

数组名=(value0 value2)

多个元素之间用空格来隔开

[root@localhost opt]# test=(1 2 3 4 )  创建方式

[root@localhost opt]# echo ${test[*]}   打开方式
1 2 3 4

数组的下标索引,对应的是元素在数组当中的位置

[root@localhost opt]# test2=([0]=3 [1]=2 [2]=4)
[root@localhost opt]# echo ${test2[*]}
3 2 4
------------------------
[root@localhost opt]# echo ${test1[*]}  0对应的是第一个   1是对应的第二个   以此类推 
a b c d e f g
[root@localhost opt]# echo ${test1[0]}
a
[root@localhost opt]# echo ${test1[3]}
d

实验例子

ip=(10 20 40 50)
read -p "输入网络部分:" net
for i in ${ip[*]}
do
ping -c 3 ${net}${i} &> /dev/null

if [ $? -eq 0 ]
then
echo "通"
echo ${net}${i}>> /opt/hosts.txt
else
echo "不通"
fi
done

数组的切片

[root@localhost opt]# arr1=(1 2 3 4 5 6 7 )
[root@localhost opt]# echo ${arr1[*]}
1 2 3 4 5 6 7
[root@localhost opt]# echo ${arr1[*]:0:2}   --这里的0:2意思是从0开始的初始位到后面的2位 
1 2

数组内的值重新替换

[root@localhost opt]# arr2=(1 2 3 4 )
[root@localhost opt]# arr2=(${arr2[*]/3/66})
[root@localhost opt]# echo ${arr2[*]}
1 2 66 4

删除数组

[root@localhost opt]# echo ${arr2[*]}
1 2 66 4
[root@localhost opt]# unset arr2
[root@localhost opt]# echo ${arr2[*]}

-------------------------
根据下标索引删除数组内指定元素
[root@localhost opt]# unset arr1[3]
[root@localhost opt]# echo ${arr1[*]}   
当元素被删除时  元素为空,索引为空  不往后递增  数组内其他元素不会发生变化
1 2 3 5 6

在数组当中追加元素

[root@localhost opt]# arr1[3]=8
[root@localhost opt]# echo ${arr1[*]}
1 2 3 8 5 6
------------
[root@localhost opt]# echo ${arr1[*]}
1 2 3 8 5 6 test
------------
[root@localhost opt]# arr1+=(11 12 13)
[root@localhost opt]# echo ${arr1[*]}
1(11) 2 3 8 5 6 test 10 11 12 13

数组的具体应用

czy () {
abc=($(echo $@))
echo "abc的数组值:${abc[*]}}"
sum=0
for num in ${abc[*]}
do
sum=$(($sum+$num))
done
echo $sum
}
abc1=(`seq 0 2 10`)
czy ${abc1[*]}

冒泡排序

类似气泡上涌的动作,在数组当中的元素从小到大,从大到小不断的移动

正向:

1 2 3 4 5 6 7 8 9 10

反向:

10 9 8 7 6 5 4 3 2 1

冒泡排序的一个思路 :

不管是正向反向也罢

在数组当中两个数字相邻的元素进行比较,正向为例:

(10 3 6 2 20)

两个相邻的值进行比较

0 1 2 3 4

10 3 进行比较

3 10 6 2 20

3 6 10 2 20

3 6 2 10 20

2 3 6 10 20

for循环:双层循环

外循环控制循环的次数

内循环来比较相邻数值完成位置交换

内外循环的不同作用

abc=(20 10 60 40 50 30)

正向

for 循环5次就可以满足条件了

#!/bin/bash
#定义数组
abc=(20 10 60 40 50 30)
length=${#abc[*]}
for ((i=1;i<$length;i++))
#确定循环的次数 
do
echo  
for ((k=0;k<$length-i;k++))
#定义内循环的范围,确定索引值,最后一位不用再去比较 0 1 2 3 4 
do
first=${abc[$k]}
#定义了第一个位置0起始位置元素的值 
j=$(($k+1))
#定义第二个索引下标,每次都比前一个+1
second=${abc[$j]}
#定义数组当中第二个元素的值
if [ $first -gt $second ]
#进行条件判断:正向排序,大的要往后移,小的要往前移。第一个数的值大于第二个数
then
temp=$first
#定义一个临时交换变量,给第一个元素 
abc[$k]=$second
#$k的起始值是0,原来的索引下标是1的值移动到索引下标0的位置 abc[0]=10
abc[$j]=$temp
#大的值往后移 abc[1]=20 
fi
done
done
echo "新的正向排序的数组为:${abc[*]}"
------------------
[root@localhost opt]# sh z.sh 
新的正向排序的数组为:10 20 30 40 50 60

df -h | awk ‘NR>1 {print $5}’ |tr -d ‘%’

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早上的星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值