2107/9/15    周五 


   

   今天我给大家分享一波数组,那么数组是什么呢? 数组是存储多个元素的连续的内存空间,相当于多个变量的集合,数组包括数组名和索引,当我们新建了一个数组之后就可以使用其中的索引来搞一波事情,既然有索引有编号,数组又是连续的,那么无序的数组就叫做稀疏数组,而且我们的索引也可以支持自定义的格式,没有非要数值,123的去排序,但是这个功能只有bash4.0才可以支持,那问题来了,怎么查看我们的bash版本呢?

   Linux运维学习之数组_数组

   据我所知,我们的centos6,7都是bash4.0以上的,而centos5则不能支持bash,即为关联索引。

   既然我们提到了变量,那我们肯定都知道,使用变量是需要提前定义的,那么我们的数组是怎么定义的呢?


declare -a ARRAY_NAME数组
declare -A ARRAY_NAME关联数组

注意:两者不可相互转换,而且当我们删除数组中的某元素--->导致稀疏格式

ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)
注意:关联数组必须先声明再调用

   定义之后就是我们的数组赋值,赋值的时候分为四种

   (1) 一次只赋值一个元素;
     ARRAY_NAME[INDEX]=VALUE
     weekdays[0]="Sunday"
    weekdays[4]="Thursday"
   (2) 一次赋值全部元素:
    ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
   (3) 只赋值特定元素:
    ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
   (4) 交互式数组值对赋值
    read -a ARRAY

  既然可以赋值,那我们的查询就很easy了,使用declare -a

  这些都没有什么好说的,我们就直接进入肉戏,引用数组,如果是我们的引用单个数组的某个元素,我们可以使用${ARRAY_NAME[INDEX]}注意:省略[INDEX]表示引用下标为0的元素

  Linux运维学习之数组_数组_02

  引用数组中的元素:
    数组切片: ${ARRAY[@]:offset:number}
    offset: 要跳过的元素个数
    number: 要取出的元素个数
    取偏移量之后的所有元素
    ${ARRAY[@]:offset}

  Linux运维学习之数组_数组_03

  向数组中追加一些元素:ARRAY[${#ARRAY[*]}]=value

  Linux运维学习之数组_数组_04

  俗话说的好,光说不练假把式,我们在下面有个小题,就当是我们课后的小扩展:

  练习:生成10个随机数保存于数组中,并找出其最大值和最小值。

    #!/bin/bash

    declare -a rand

    for ((i=0;i<10;i++));do

        rand[$i]=$RANDOM

        [ $i -eq 0 ] && max=${rand[$i]} && min=$min && continue

        [ ${rand[$i]} -gt $max ] && max=${rand[$i]} && continue

        [ ${rand[$i]} -lt $min ] && min=${rand[$i]}

    done

    echo "All rand are ${rand[@]}"

    echo "Max is $max"

    echo "Min is $min"

  好了,今天的分享就到这,本周刚转战的51CTO,内容和时间都有些仓促,不足之处,请多多指教。