bash腳本編程之數組及隨機變量
數組:能夠容納多個數組元素的連續的內存空間;包括兩種類型: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來得到原來得到過的重復的隨機數值。
bash腳本編程之數組及隨機變量