bash中有變量,它有一個很重要的特性:一個變量中僅能存儲一個數值;但是,在實際應用中,一個數值往往是達不到我們的需求的,所以這裏就引入了數組:能夠容納多個屬組元素的連續的內存空間;它的引入使人們的工作效率提高了。
數組分爲稀疏數組和稠密數組,其中bash屬於稀疏數組。數組中有數組元素:數組中任何一個存放數據的存儲單元,其作用相當於一個變量。
數組元素標識分爲以下幾類:
索引數組標識:所有的數組元素都是使用數字編號的;
通常數字編號是從0開始的,即:0,1,2,3...
關聯數組標識:所有的數組元素都可以使用名稱(字符串)來標識;
注意:一般在bash4.0以上的版本纔有可能支持關聯數組;
數組的生命和定義:
1.declare命令:
-a to make NAMEs indexed arrays (if supported)
將其後的變量名稱聲明爲索引數組;
-A to make NAMEs associative arrays (if supported)
將其後的變量名稱聲明爲關聯數組;
示例:
定義稠密數組:
[root@localhost ~]# declare -a NAMES=("zhao" "qian" "sun" "li") [root@localhost ~]# echo ${NAMES[3]} li
定義稀疏數組:
[root@localhost ~]# declare -a NAMES=([0]="zhao" [2]="qian" [8]="sun" [10]="li") [root@localhost ~]# echo ${NAMES[0]} zhao
2.直接使用變量賦值的方式:
定義稠密的索引數組:
ARRAY_NAME=("value1" "value2" "value3" ...)
定義稀疏的索引數組:
ARRAY_NAME=([0]="value1" [1]="value2" [3]"value3" ...)
定義關聯數組:
ARRAY_NAME=([Index_Inanme]='value1' Index_Inanme='value2' ...)
3.分別定義數組元素:
ARRAY_NAME[0]='value1'
ARRAY_NAME[1]='value2'
ARRAY_NAME[2]='value3'
...
ARRAY_NAME[N-1]='value(n-1)'
[root@localhost ~]# STUDENT_INF[O]='xiaoma' [root@localhost ~]# STUDENT_INF[1]='22' [root@localhost ~]# STUDENT_INF[2]='123456789' [root@localhost ~]# echo ${STUDENT_INF[0]} xiaoma [root@localhost ~]# echo ${STUDENT_INF[1]} 22 [root@localhost ~]# echo ${STUDENT_INF[2]} 123456789
引用數組元素的方式:
${ARRAY_NAME[INDEX]}
注意:如果在引用數組元素時沒有給出具體的索引編號,則默認編號爲"0",即顯示第一個數組元素的數值;
引用整個數組中所有元素:
${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}
[root@localhost ~]# STUDENT_INF[O]='xiaoma' [root@localhost ~]# STUDENT_INF[1]='22' [root@localhost ~]# STUDENT_INF[2]='123456789' [root@localhost ~]# echo ${STUDENT_INF[*]} xiaoma 22 123456789 [root@localhost ~]# echo ${STUDENT_INF[@]} xiaoma 22 123456789
引用整個數組的所有元素的索引號:
${!ARRAY_NAME[*]}或者${!ARRAY_NAME[@]}
[root@localhost ~]# echo ${!STUDENT_INF[@]} 0 1 2 [root@localhost ~]# echo ${!STUDENT_INF[*]} 0 1 2
查看數組中的元素個數(數組長度):
${#ARRAY_NAME[*]}或者${#ARRAY_NAME[@]}
[root@localhost ~]# echo ${STUDENT_INF[@]} xiaoma 22 123456789 [root@localhost ~]# echo ${#STUDENT_INF[*]} 3 [root@localhost ~]# echo ${#STUDENT_INF[@]} 3
數組切片:
${ARRAY_NAME[*]:offset}或者${ARRAY_NAME[@]:offset}
//顯示包括offset數值所對應表示的元素及其後所有的元素;
[root@localhost ~]# echo ${NAMES[@]} zhao qian sun li [root@localhost ~]# echo ${NAMES[@]:2} qian sun li
${ARRAY_NAME[*]:offset:number}或者${ARRAY_NAME[@]:offset:number}
//顯示數組中包括offset數值所對應表示的位置的元素及其後number個元素的值;
[root@localhost ~]# echo ${NAMES[@]} zhao qian sun li [root@localhost ~]# echo ${NAMES[@]:2:2} qian sun
撤銷數組:
unset ARRAY_NAME
RANDOM變量:位置:/dev/random
隨機數變量:0-32767,整數值;
[root@localhost ~]# echo $RANDOM 383 [root@localhost ~]# echo $RANDOM 30783
隨機數如何生成的:
從熵池中取隨機數;
熵池:
/dev/random
兩次敲擊鍵盤的時間間隔;
兩次IO的時間間隔;
...
/dev/uradom:僞熵池
利用應用程序計算得到的隨機數;