數組
變量:內存的存儲空間;
變量的特點:每個變量中只能存放一個數據,變量只能進行一次性的賦值;
存放本班每個人的名字於變量:
1.一次性賦值:
NAME="name1 name2 name3 ..."
2.使用多個變量,分別賦值:
NAME1=xu
NAME2=shen
3.數組變量:
數組:存放一個或多個元素的連續的內存空間;相當於多個變量的集合;
數組元素:數組中任何一個存放數據的存儲單元;
數組的索引:
1.數字:索引數組(Index ARRAY)
0,1,2,...
2.名稱(字符串):關聯數組(Related ARRAY)
bash4.0以上的版本才支持;
稠密數組和稀疏數組:
稠密數組:索引編號必須連續
稀疏數組:索引編號可以不連續,bash數組屬於此類;
聲明數組:
1.declare命令
declare -i NAME:將NAME聲明爲整型變量;
declare -x NAME:將NAME聲明爲環境變量;
declare -a NAME:將NAME聲明爲索引數組(如果支持);
declare -A NAME:將NAME聲明爲關聯數組(如果支持);
declare -a NAME=("value1" "value2" "value3" ...)
declare -a NAME=([0]="value1" [1]="value2" [5]="value3" ...)
2.直接聲明數組:
直接爲數組賦值:
ARRAY_NAME=("value1" "value2" "value3" ...) 聲明稠密數組;
ARRAY_NAME=([0]="value1" [1]="value2" [5]="value3" ...) 聲明稀疏數組;
3.定義數組的元素而創建數組:
ARRAY_NAME[0]=value1
ARRAY_NAME[1]=value2
...
引用數組中元素:
引用變量的方法:${NAME}
引用數組元素的方法:${ARRAY_NAME[INDEX]}
注意:如果不給出INDEX,則表示引用數組的第一個元素,即INDEX=0的元素;
引用整個數組的所有元素:${ARRAY_ANME[*]}或者${ARRAY_ANME[@]}
引用數組的索引:${!ARRAY_ANME[*]}或者${!ARRAY_ANME[@]}
查看數組的長度(數組中有效元素的個數)
${#ARRAY_NAME[*]} 或者 ${#ARRAY_NAME[@]}
數組切片:
${ARRAY_NAME:offset}:顯示包括offset數字所表示的索引位置及以後的所有元素;
${ARRAY_NAME:6}:跳過0-5,從6開始顯示
${ARRAY_NAME:offset:number}:顯示包括offset數字所表示的索引位置及以後的number個元素;${ARRAY_NAME:6:3}:跳過0-5,從6開始顯示3個元素;
想數組中追加元素:
1.稠密數組:
ARRAY_NAME[${#ARRAY_NAME[*]}]=valueN
0 1 2 3 4 5 6 7
2.稀疏數組:
ARRAY_ANME[INDEX]=valueN
注意:INDEX必須爲未被使用的數組元素索引編號;
撤銷數組:
usnet ARRAY_NAME
刪除數組中的元素:
unset ARRAY_NAME[INDEX]
RANDOM變量:0-32767
熵池
/dev/random
/dev/urandom
bash腳本編程:
寫一個腳本:
創建一個用戶alice,如果該用戶已經存在,就提示用戶已經存在的信息;否則將創建用戶;
shell腳本編程的特點:
過程式編程語言
腳本類語言
解釋型語言
過程式編程語言:
順序執行結構:
以從左到右,從上到下順序執行所有的語句(命令)
shell腳本的主體結構;
選擇執行結構:
依照給定條件的邏輯判斷結果或者依照可選的取值範圍,進而選擇某個分支中的語句來執行;
if:分支選擇標準:邏輯判斷的結果;
case:分支選擇標準:根據可選的取值;
循環執行結構:
對於某特定語句,重複執行0次,1次或多次;
for:遍歷指定的列表;
while:根據邏輯判斷的結果;
until:根據邏輯判斷的結果;
select:死循環,利用循環機制提供選擇列表;
選擇執行結構:
if語句:
if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi
if語句單分支結構:如果條件爲真,則執行then後的命令,否則,不做任何操作;
if CONDITION
then STATEMENT
fi
if CONDITION ; then
STATEMENT1
STATEMENT2
...
fi
注意:想要執行then後面的STATEMENTS,前提條件是CONDITION部分爲真;
if語句的雙分支結構:如果條件爲真,就執行then後面的命令;否則就執行else後面的命令;
if CONDITION ; then
STATEMENT
...
else
STATEMENT
...
fi
if語句的多分支結構:首先判斷CONDITION1是否爲真,如果爲真,則執行第一個then後面的語句;否則就判斷CONDITION2是否爲真,如果爲真,就執行第二個then後面的語句;否則就判斷CONDITION3是否爲真,如果爲真,就執行第三個then後面的語句...;如果所有的CONDITION都爲假,就執行else後面的語句;
if CONDITION1 ; then
STATEMENT
...
elif CONDITION2 ; then
STATEMENT
...
elif CONDITION3 ; then
STATEMENT
...
...
else
STATEMENT
...
fi
建議:if多分支結構,能不用就不用;