標籤:檔案的 引用 tle value 互動式 nbsp val files index
數組:
變數:儲存單個元素的記憶體空間
數組:儲存多個元素的連續的記憶體空間,相當於多個變數的集合
數組名和索引
索引:編號從0開始,屬於數值索引
注意:索引可支援使用自訂的格式,而不僅是數值格式,即為關聯索引, bash4.0版本之後開始支援
bash的數組支援稀疏格式(索引不連續)
聲明數組: declare -a ARRAY_NAME:普通數組(聲明可有可無)
declare -A ARRAY_NAME: 關聯陣列(必須先聲明才可用)
注意:兩者不可相互轉換
數組賦值
單個賦值:weekdays[0]="Sunday"
多個賦值:name=("mage" "zhangsir" "wang")
特定元素賦值:title=([0]="yuan[3]")
互動式賦值:read -a
顯示所有數組:declare -a
引用數組
引用數組元素: ${ARRAY_NAME[INDEX]}
注意:省略[INDEX]表示引用下標為0的元素
引用數組所有元素:
${ARRAY_NAME[*]} ${ARRAY_NAME[@]}
數組的長度(數組中元素的個數):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
刪除數組中的某元素:導致稀疏格式 unset ARRAY[INDEX]
刪除整個數組: unset ARRAY
數組資料處理
引用數組中的元素:
數組切片:${ARRAY[@]:offset:number}
offset: 要跳過的元素個數
number: 要取出的元素個數
取位移量之後的所有元素 ${ARRAY[@]:offset}
向數組中追加元素:
ARRAY[${#ARRAY[*]}]=value
關聯陣列:
declare -A ARRAY_NAME ARRAY_NAME=([idx_name1]=‘val1‘ [idx_name2]=‘val2‘...)
注意:關聯陣列必須先聲明再調用
樣本
產生10個隨機數儲存於數組中,並找出其最大值和最小值
#!/bin/bash
declare -a randfor ((i=0;i<10;i++));do rand[$i]=$RANDOM if [ $i -eq 0 ];then max=${rand[$i]} min=$max else [ $max -lt ${rand[$i]} ] && { max=${rand[$i]};continue; } [ $min -gt ${rand}[$i] ] && min=${rand[$i]} fidoneecho All rand is ${rand[*]}echo Max rand is $maxecho Min rand is $min
編寫指令碼,定義一個數組,數組中的元素是/var/log目錄下所有以。log結尾的檔案,統計出其下標為偶數的檔案的行數之和。
#!/bin/bashdeclare -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.
shell指令碼編程數組