变量:用来存储存在值的内存空间;特点是一个变量中仅能存储一个数值。
数组:能够容纳多个数组元素的连续的内存空间;包括两种类型: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来得到原来得到过的重复的随机数值。