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