1. 程式人生 > >Shell數組操作

Shell數組操作

bsp bin font 個數 1.3 header lar 格式 相同

1、數組定義

1.1 declare定義

使用declare -a 命令定義數組(數組的索引是從0開始計數的),接下來就可以通過[]操作符為不同索引位置的元素賦值。

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

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

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

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

1.2直接定義

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

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

1.3帶下標定義

使用[]操作符,為每一個指定下標賦值,下標也可以不連續

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

1.4從文件讀取數組

days=(`cat days.txt`)

2、數組操作

2.1賦值

指定下標,使用[]操作符為元素賦值,當下標不存在時,相當於為數組增加元素

declare -a names
names[0]=tom

2.2取值

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

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

獲得數組中所有值:${數組名[@]}${數組名[*]}

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

註意:${數組名}並不會獲得所有值,它只會獲得到第一個元素的值。即${數組名}等價於${數組名[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[@]})

Shell數組操作