Shell數組操做

一、數組定義

1.1 declare定義

使用declare -a 命令定義數組(數組的索引是從0開始計數的),接下來就能夠經過[]操做符爲不一樣索引位置的元素賦值。shell

declare -a names
names[0]=tom
names[1]=jack

注意:shell變量是弱類型的,比要求數組中元素類型相同數組

在定義數組的同時,能夠同時賦值,用()表示,各元素之間用空格隔開bash

#定義的同時直接賦值
declare -a names=(tom jack)
#增長元素
names[2]=sue

1.2直接定義

建立數組最簡單的方法是使用()直接定義數組,括號中元素用空格隔開;在括號中也能夠聲明下標。實例:post

#使用()直接數組
days1=(one two three four five)
#或者在()中聲明下標,默認從0開始
days2=([0]=’one’ [1]=’two’ [2]=’three’ [3]=’four’)
#下標能夠不連續
days3=([0]=’one’ [2]=’three’)

1.3帶下標定義

使用[]操做符,爲每個指定下標賦值,下標也能夠不連續spa

header[0]=’user’
header[1]=’pid’
header[2]=’%CPU’
header[3]=’%MEM’

1.4從文件讀取數組

days=(`cat days.txt`)

二、數組操做

2.1賦值

指定下標,使用[]操做符爲元素賦值,當下標不存在時,至關於爲數組增長元素code

declare -a names
names[0]=tom

2.2取值

指定下標,使用[]操做符從數組中對應元素,而後使用$取值,格式:${數組名[索引]}blog

days=(one two three four five)
#取出第1個元素
echo ${days[0]}
#取出第3個元素
echo ${days[2]}

得到數組中全部值:${數組名[@]}${數組名[*]}索引

${數組名[@]}獲得是以空格隔開的元素,能夠用在數組遍歷中;${數組名[*]}獲得的是一整個字符串。three

注意:${數組名}並不會得到全部值,它只會得到到第一個元素的值。即${數組名}等價於${數組名[0]}字符串

示例:

#!/bin/bash
#數組取值

days=(one two three four)
echo ${days}
echo ${days[0]}
echo ${days[1]}
echo ${days[@]}
echo ${days[*]}

echo "**********"
names=()
names[1]=tom
names[2]=jack
echo ${names}
echo ${names[1]}
echo ${names[@]}

結果:

 

2.3長度

利用」@」或「*」字符,將數組擴展成列表,而後使用」#」來獲取數組元素的個數。

示例:

#!/bin/bash
#數組個數

days=(one two three four)
echo "數組days的元素個數爲:${#days[@]}"

echo "**********"
names=()
names[1]=tom
names[2]=jack
echo "數組names的元素個數爲:${#names[*]}"

結果:

注意:若是某個元素是字符串,能夠經過制定索引的方式得到該元素的長度。

2.4遍歷

存在如下三種方式:

(1)${數組名[@]}、${數組名[@]}都可以得到全部元素(無論是元素列表,仍是一整個字符串),使用for循環遍歷便可

(2)帶數組下標的遍歷,當須要使用到數組的下標時,可使用${!數組名[@]}

(3)while循環:根據元素的個數遍歷,但對於稀疏數組,可能會丟失數據

示例:

#!/bin/bash
#數組遍歷

days=(one two three four)
#for循環遍歷
for day in ${days[*]}  #或${days[@]}
do
        echo $day
done
echo "***************"
#fou循環帶下標遍歷
for i in ${!days[@]}
do
        echo ${days[$i]}
done

echo "***************"
#while循環
names=()   #數組names是一個稀疏數組
names[1]=tom
names[2]=jack
i=0
while [ $i -lt ${#names[*]} ]
do
        echo ${names[$i]}
        let i++
done

結果:

2.5刪除

刪除一個數組或數組中元素用unset命令。

unset 數組名[索引]      #刪除索引下的元素

unset 數組名         #刪除整個數組

2.6鏈接

用()將多個數組鏈接在一塊兒,()中各個數組用空格隔開。

days=(one two three four)
names=(tom jack)
days=(${days[@]} ${names[@]})
相關文章
相關標籤/搜索