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
来源:oschina
链接:https://my.oschina.net/u/4364002/blog/4317713