1. 程式人生 > >bash腳本編程之數組及隨機變量

bash腳本編程之數組及隨機變量

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腳本編程之數組及隨機變量