1. 程式人生 > >shell指令碼中 陣列的基本用法

shell指令碼中 陣列的基本用法

在shell指令碼中,陣列 也是一種常用的資料結構,這篇文章簡單 說一下 陣列的基本用法.

1 陣列的宣告

這樣就可以 宣告 arr  ,和 iplist 的陣列

#陣列的宣告
# 用 declare -a variable 語句來清楚地指定一個數組
# 宣告一個數組 
declare  -a  arr 
declare  -a  iplist

2 陣列的 定義,賦值
# 陣列的定義
arr=(1 2 3 4 5 6 7 8 9)
iplist=(
	10.130.2.20
	10.130.2.21
	10.130.2.22
	10.130.2.23
	10.130.2.24
	10.130.2.25
	10.130.2.26
	10.130.2.27
	10.130.2.28
	10.130.2.29
	)

#陣列的 賦值
arr[0]=zero
arr[1]=one
這裡賦值請注意,如果 arr[0] 已經有值 會被覆蓋。此時 arr0 = zero 

3 求陣列的長度

# 求陣列 長度 2中方式
length=${#arr[@]}
length1=${#arr[*]}
echo "length:$length"
echo "length1:$length1"

4 遍歷陣列
# 遍歷陣列 有兩種方式
# 1)遍歷陣列 
for(( i=0;i<${#arr[@]};i++)) 
do 
	echo ${arr[i]}
done

# 2)遍歷陣列 
echo  ${arr[@]}

  2017年 09月 19日 星期二 09:29:33  補充:

4-1  資料的遍歷 好像 還有其他的兩種方式

#!/bin/sh

iplist=(
10.130.2.20
10.130.2.21
10.130.2.23
10.130.2.24
10.130.2.25
10.130.2.26
10.130.2.27
10.130.2.28
10.130.2.29
10.130.2.30

)

for  ip in ${iplist[*]}
do
  echo $ip

done

echo "----------------------------"
for  ip in ${iplist[@]}
do
  echo $ip

done
這樣 也是可以 遍歷shell 中的陣列的.

5  單獨 取某個值,陣列下標從 0 開始 

 這裡取下標為 1  3 的值

echo ${arr[1]}
echo ${arr[3]}

6    1) 刪除 陣列的某個值,這裡要注意一點, shell 中的陣列特點。
### 測試刪除 陣列###
#!/bin/bash
curDir=$(cd "$(dirname "${BASH_SOURCE[0]}")"; pwd); #當前絕對路徑
function  printarr()
{
   for((i=0;i<${#arr[@]};i++)) 
   do 
	echo "index:$i  , ${arr[i]}"
   done
}

# 陣列的定義
#arr=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 )
arr=(0 1 2 3 4 5 6 7 8 9 10 11 12  )

# 求陣列 長度
length=${#arr[@]}
printarr
echo "length before : ${#arr[@]}"
# 刪除 陣列 元素
unset  arr[0]
echo  "arr0 : ${arr[0]}"
echo  "arr2 : ${arr[2]}"
unset  arr[3]
echo  "arr3 : ${arr[3]}"
echo "length after: ${#arr[@]}"
printarr

來看一下 結果


在shell 指令碼 發現 刪除 陣列後, 對應"位置" 會被保留,而是 向資料結構裡面 那樣, 裡面依次前移,來填補空缺位置,在shell 刪除 陣列, 把值 刪除了, 但是對應的“位置”會留著。 之後 還可以在位置讓填充 其他的值
arr[0]=0
arr[3]=3
echo "-------------------"
printarr


這裡 重新 又被賦值成功了。

 2)刪除整個陣列 

# 刪除整個陣列 
unset arr

7  1)陣列的分片 

${arr[@]:number1:number2}
這裡 number1 從下標number1 開始取值, number2 往後取幾個元素,即取到的新的陣列的長度

arr=(1 2 3 4 5 6 7 8 9 10  11  12 13)

echo "{arr[@]:0:3} ---  ${arr[@]:0:3}"
# 1 2 3

echo "{arr[@]:3:5} ---  ${arr[@]:3:5}"
# 4 5 6 7 8

echo "{arr[@]:5:4}  ---  ${arr[@]:5:4}"
# 6 7 8 9

2) 陣列賦值,分片之後賦值,將分片後的陣列,重新賦值給新的陣列
newarr=(${arr[@]:0:3})

for(( i=0;i<${#newarr[@]};i++)) 
do 
	echo ${newarr[i]}
done

總結:  本文介紹了陣列的最基本的用法,也是shell指令碼中陣列經常用到的。

  分享快樂,留住感動。你的點贊,就是對我最大的支援。                                                          -- biaoge              2017年 09月 17日 星期日 22:07:32