shell腳本之數組


變量:存儲單個元素的內存空間。

數組:存儲多個元素的連續的內存空間。

  數組名:整個數組只有一個名字;

  數組索引:編號從0開始

    數組名[索引];

    引用數組中的某個元素:${ ARRAY_NAME [ INDEX ] }     

      注意:引用變量值必須加上花括號{ }。

聲明數組:

  declare -a ARRAY_NAME:聲明索引數組。

  declare -A ARRAY_NAME:聲明關聯數組。

數組中元素的賦值方式:

  (1)一次只賦值一個元素;

    ARRAY_NAME[INDEX]=value

  (2)一次賦值全部元素;

    ARRAY_NAME=("VAL1"  "VAL2"  "VAL3" .....) 

     注意: 元素與元素之間使用空格字符隔開

  (3)只賦值特定元素;這種稱之為稀疏格式的數組。

    ARRAY_NAME=([0]="VAL1"  [3]="VAL3"  ........)

  (4)read也可以給數組賦值

    read -a ARRAY_NAME

演示:

 如何引用數組?

引用數組中的元素:${ARRAY_NAME[INDEX]}

  注意:引用時,只給數組名,表示引用下標為0的元素;

引用數組中的所有元素:${ARRAY_NAME[*]}或者${ARRAY_NAME[@]}

 

求數組的長度(數組中元素的個數):${#ARRAY_NAME[@]}或者${#ARRAY_NAME[*]}

案列1:生成10個隨機數,並找出其中最大值和最小值

#!/bin/bash
#
declare -a rand
declare -i max=0
for i in {1..10};do
        rand[$i]=$RANDOM
        echo "rand[$i]: ${rand[$i]}"
        [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
done
echo "max: $max"

查看一下結果:

案例2:定義一個數組,數組中的元素是var/log/目錄下所有以.log結尾的文件的名稱;統計其下標為偶數的文件中的行數之和;

[root@ELK-chaofeng test]# cat test10.log 
#!/bin/bash
declare -a files
files=(/var/log/*.log)

declare -i lines=0

for i in $(seq 0 $[${#files[@]}-1]);do
    if [ $[$i%2] -eq 0 ];then
        let lines+=$(wc -l ${files[$i]} | cut -d' ' -f1)
    fi
done
echo "Lines: $lines"
[root@ELK-chaofeng test]# 

查看一下結果:

 

數組元素切片:${ARRAY_NAME[@]:offset:number}

  offset:要路過的元素個數;

  number:要取出的元素個數,省略number時,表示取偏移量之后的所有元素;

演示:

向非稀疏格式數組中追加元素:

  ARRAY_NAME[${#ARRAY_NAME[*]}]=

 刪除數組中的某元素:

  unset ARRAY_NAME[INDEX]

關聯數組:

  declare -A ARRAY_NAME

    ARRAY_NAME=([index_name1]="value1"  [index_name1]="value2"  .....)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM