bash编程之数组:

   变量  :指的是内存中的一段地址空间。

   变量名:指的是变量的地址空间 起始的位置。

   数组  :在一片连续的地址空间中,可以存储同一类别但是不同取值的值,

           这些不同的值可以使用同一名字来使用它们,这个名字就是数组。


数组的引用:

   数组是有索引的,也叫做下标,用来表示数组中的不同值。

   例如数组的名字是array,而下标叫做index,所以表示方式是:array[index]

   下标index的取值默认从0开始。

   在引用数组时,如果没有指定下标(例如:array),默认指的就是array[0]


declare:

   -i    表示声明这是一个整数型变量。

   -A    表名这是一个数组。

         在bash中可以不进行声明,只不过声明后更明显。


数组的赋值方式:

   方法1:

         当所有的元素值都不为空时,可以这样按照顺序进行赋值:

           数组名=("元素1"  "元素2")

   方法2:

         当某些元素值为空时,可以直接指定下标对应的元素值:

           数组名=([0]="元素1"  [3]="元素2")

   方法3:

         对每个元素逐个的进行赋值:

           数组名[0]="元素1"

           数组名[3]="元素2"


引用数组中的元素值:

   ${array[index]} :这里类似于变量的引用,只不过必须加上花括号"{ }"和"[下标]"

   ${array[*]}     :这里使用"*"代替下标,表示引用数组中的所有元素。

   ${#array[*]}    :这里加上一个"#",用来显示数组中一共有多少个"非空"的元素

   ${#array[index]}:这样显示下标为[index]的元素一共有多少个字符。

   ${#array}       :这样显示下标为0的元素一共有多少个字符

例子:

# UserName=("bind" "named" "daemon" "root")
# echo ${UserName[2]}
  daemon
# echo ${UserName[*]}
  bind named daemon root
# echo ${#UserName[*]}
  4
# echo ${#UserName[2]}
  6
# echo ${#UserName}
  4


关联数组:

   bash v4版本及以后支持。

   数组的下标可以使用字符串,也就是index不用使用0、1、2、3...这样的数字了,

   而可以使用例如first、one等这样字符串了。


数组的例子:

   一、把全班的人名字保存到数组中,随机挑选一个回答问题:

#!/bin/bash
#定义全班所有的人名到数组中
StudentName=("hadoop" "openstack" "apache" "nginx" "varnish" "squid")
#取得数组中人名的个数
StudentCount=${#StudentName[*]}
#对随机数进行取余运算,看最后余数是哪个
Suijishu=$[$RANDOM%$StudentCount]
#显示被选中的人
echo ${StudentName[$Suijishu]}


 二、对全班人的名字保存到数组,随机挑选2个人回答问题(隐形要求这两个人的名字不能重复

#!/bin/bash
#定义全班所有的人名到数组
StudentName=("hadoop" "openstack" "apache" "nginx" "varnish" "squid")
#取得数组中人名的个数
StudentCount=${#StudentName[*]}
#对随机数进行取余运算,取得随机的余数
Suijishu1=$[$RANDOM%$StudentCount]
Suijishu2=$[$RANDOM%$StudentCount]
#对第二次取得随机余数进行判断
while [ $Suijishu2 = $Suijishu1 ];do
        Suijishu2=$[$RANDOM%$StudentCount]
done
#利用前面的随机余数取得对应的用户名,然后保存至变量。
ONE=${StudentName[$Suijishu1]}
TWO=${StudentName[$Suijishu2]}
#显示用户名
echo $ONE $TWO