变量:用来存储存在值的内存空间;特点是一个变量中仅能存储一个数值。

数组:能够容纳多个数组元素的连续的内存空间;包括两种类型:1.稀疏数组(bash属于稀疏数组):在数组中的元素编号可以没有顺序;2.稠密数组:在数组中的元素必须按照顺序编号排列。

数组元素:数组中任何一个存放数据的存储单元,其作用相当于一个变量;

  元素的标识有两种:索引数组标识:利用数字编号的方式,所有的数组元素都是使用数字编号的;

                       通常数字编号从零开始,即:0,1,2……

              关联数组标识:所有的数组元素都是可以使用名称或者字符串来标识;(在bash4.0以上的版本才有可能支持关联数组


数组的声明和定义:用declare命令来、直接使用变量赋值或分别定义数组元素来声明和定义数组。

    1.declare命令:

     常用选项:

      -a:声明索引数组,将其后的变量名称声明为索引数组,如果支持的话(bash4.0以上的版本有可能);

      -A:声明关联数组,将其后的变量名称声明为关联数组,如果支持的话(bash4.0以上的版本有可能);


      例子:

        定义稠密数组:

          declare -a NAMES=("zhang" "wang" "liu" "li")

        定义稀疏数组:

          declare -a NAMES2=([0]='zhangsan' [2]='cl' [3]='mayun')


   

    2.直接使用变量赋值的方式:

      定义稠密的索引数组:

      ARRAY_NAME=("value1" "value2" "value3" ...)

      定义稀疏的索引数组:

      ARRAY_NAME=([0]="value1" [1]="value2" [2]"value3" ...)

      定义关联数组:

      ARRAY_NAME=([Index_name1]="value1" [Index_name3]="value2" [Index_name3]="value3" ...)


    3.分别定义数组元素:

       ARRAY_NAME[0]='value1'

       ARRAY_NAME[1]='value2'

       ...

       ARRAY_NAME[N-1]='value(N)'

示例:

[root@localhost ~]# STUDENT_INFO[0]='xiaoma'

[root@localhost ~]# STUDENT_INFO[1]='22'

[root@localhost ~]# STUDENT_INFO[2]='xxxxxxxxxxxx'

[root@localhost ~]# echo ${STUDENT_INFO[1]}

22


      引用数组元素的方式:

        ${ARRAY_NAME[INDEX]}

        注意:如果在引用数组元素时没有给出具体的索引编号,则默认编号为0,即显示第一个数组元素的值;


      引用整个数组中所有元素:

        ${ARRAY_NAME[*]} 或者${ARRAY_NAME[@]}


      引用整个数组的所有元素的索引号:

        ${!ARRAY_NAME[*]} 或者 ${!ARRAY_NAME[@]}


      查看数组中的元素个数(数组长度):

        ${#ARRAY_NAME[*]} 或者 ${#ARRAY_NAME[@]}


      整组切片:

        ${#ARRAY_NAME[*]:offset}

         //显示包括offset数值所对应表示位置的元素及其后所有的元素;

        ${#ARRAY_NAME[*]:offset:number}

         //显示包括offset数值所对应表示位置的元素及其后number个元素的值;

        

      撤销数组:

        unset ARRAY_NAME

         //数组内的元素一同被撤销,失效;


      RANDOM变量:

        随机数变量:取出的随机数是0-32767之间的整数值;

   

        从熵池中取随机数;

          熵池:

             /dev/random

               两次敲击键盘的时间间隔;

               两次IO的时间间隔;

             /dev/urandom(伪熵池)

               利用应用程序计算得到的随机数;


            关于取随机数,我们不能一直在RANDOM中取随机数,无法得到原来已经得到过的数值,所以,我们可以用一个变量来定义随机数:例如VAR100=$RANDOM,             这样我们可以通过 echo $VAR100来得到原来得到过的重复的随机数值。