標籤:shell 數組
變數:儲存單個元素的記憶體空間;
數組:儲存多個元素的連續的記憶體空間;
數組名:整個數組只有一個名字;
數組索引:編號從0開始;
數組名[索引],
${ARRAY_NAME[INDEX]}
關聯陣列:
注意:bash-4及之後的版本,支援自訂索引格式,而不僅僅是0,1,2,...數字格式;
此類數組稱之為“關聯陣列”
聲明數組:
declare -a NAME:聲明索引數組;
declare -A NAME:聲明關聯陣列;
數組中元素的賦值方式:
(1) 一次只賦值一個元素;
ARRAY_NAME[INDEX]=value
(2) 一次賦值全部元素;
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
(3) 只賦值特定元素;
ARRAY_NAME=([0]="VAL1" [3]="VAL4" ...)
注意:bash支援稀疏格式的數組;
(4) read -a ARRAY_NAME
引用數組中的元素:${ARRAY_NAME[INDEX]}
注意:引用時,只給數組名,表示引用下標為0的元素;
數組的長度(數組中元素的個數):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
樣本:產生10個隨機數,並找出其中的最大值和最小值;
#!/bin/bash#declare -a randdeclare -i max=0for i in {0..9}; do rand[$i]=$RANDOM echo ${rand[$i]} [ ${rand[$i]} -gt $max ] && max=${rand[$i]}doneecho "MAX: $max"
練習:寫一個指令碼
定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的檔案;統計其下標為偶數的檔案中的行數之和;
#!/bin/bash#declare -a filesfiles=(/var/log/*.log)declare -i lines=0for i in $(seq 0 $[${#files[*]}-1]); do if [ $[$i%2] -eq 0 ]; then let lines+=$(wc -l ${files[$i]} | cut -d‘ ‘ -f1) fidoneecho "Lines: $lines."
引用數組中的所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
數組元素切片: ${ARRAY_NAME[@]:offset:number}
offset:要路過的元素個數;
number:要取出的元素個數;省略number時,表示取位移量之後的所有元素;
向非稀疏格式數組中追加元素:
ARRAY_NAME[${#ARRAY_NAME[*]}]=
刪除數組中的某元素:
unset ARRAY[INDEX]
關聯陣列:
declare -A ARRAY_NAME
ARRAY_NAME=([index_name1]="value1" [index_name2]="value2" ...)
本文出自 “汪立明” 部落格,請務必保留此出處http://afterdawn.blog.51cto.com/7503144/1916071
shell指令碼編程之數組