bash中的數組

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:僞熵池

利用應用程序計算得到的隨機數;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章