shell的数组

数组定义方法

方法一:数组名=( value0 value1 value2 ...)

 

方法二:数组名=([0]=value [1]=value [2]=value...)

 

方法三:列表名="value0 value1 value2 ..."

              数组名=($列表名)

 

方法四:数组名[0]="value"

              数组名[1]="value"

              数组名[2]="value"

              数组名[3]="value"

              ...

方法五:脚本定义创建数组

#!/bin/bash
a=0
for i in 10 20 30 40 50
do
     pp[$a]=$i
     let a++


done
echo ${pp[@]}

 删除数组

unset 数组名[下标]                   #删除某个值

unset 数组名                           #删除整个数组

数组包括的数据类型

  • 数值类型
  • 字符类型

使用“”或‘’定义

输出数组方式:echo ${数组名[@]}或者 echo ${数组名[*]}

 

通过脚本方式获取数组的值,并判断数组值是否完整

 

 

数组切片

 数组替换

 数组追加元素

方法一:数组名[新下标]=新元素

方法二:数组名[${数组名[@]}]=新元素       ps:此方法必须数组完整

方法三:新数组名=(“${数组名[@]}” “新元素” “新元素”)

双引号不能省略,否则,当数组中存在包含空格的元素时会按空格将元素拆分成多个;

不能将“@”替换为 '*',如果替换,不加双引号时与“@”的表现一致。加双引号时,会将数组中的所有元素作为一个元素添加到数组中

方法四:数组名+=(元素1 元素2 元素3 ...)

 

 

 

 向函数传入数组的值

函数名(){

newarr=($@)  #函数内通过$@能获取到调用函数时后面跟的所有参数,加上()可以在函数内组成新的数组

........

echo ${new函数[@]}

}

arr=($(函数名 ${arr[@]}))   #调用函数后面跟的参数为数组的元素列表表达式

 

 从函数内返回数组

#!/bin/bash

test () {
nerpp=($@)     函数内的数组nerpp的值为数组pp的值
for ((i=0;i<${#nerpp[@]};i++))   i的取值范围
do
nerpp[$i]=$[2 * ${nerpp[$i]}]    新的数组的各个值=原先值*2
done
echo ${nerpp[@]}             输出数组名nerpp的所有值
}
pp=(10 20 30 40 50)
echo "函数外数组值为:${pp[@]}"
#test ${pp[@]}
test1=($(test ${pp[@]}))          新的数组名=(函数test输出的数组nerpp的值)
echo "新的数组值为:${test1[@]}"    新的数组值

 数组排序算法

冒泡排序:类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动

基本思想:对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部

算法思路:冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一下数组元素,不需要对比同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数排序轮数而减少

 

#!/bin/bash
arr=(63 4 20 1 3 15)
echo "旧数组的值为:"${arr[@]}
#获取数组的长度
length=${#arr[@]}

#外循环定义比较轮数,比较轮数为数组长度减1,且从1开始
for ((a=1;a<length;a++))
do
#内层循环用来确定比较元素的位置,比较相邻两个元素,较大的元素往后移,并且比较次数会随着比较轮数的增加而减少
     for ((b=0;b<length-a;b++))
     do
        #读取相邻两个元素的前面元素的值
        first=${arr[$b]}
        #读取相邻两个元素的后面元素的值
        c=$[b+1]
        second=${arr[$c]}
        #相比较两个相邻元素的值大小,如果前面元素值大,则与后面元素交换位置
        if [ $first -gt $second ];then
           #使用4临时变量保存前面元素的值,实现两个相邻元素交换位置
           tmp=$first
           arr[$b]=$second
           arr[$c]=$tmp
       fi
      done
done

echo "冒泡排序后的数组的值为:"${arr[@]}

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值