1. 程式人生 > 實用技巧 >變數5-陣列相關

變數5-陣列相關

一、陣列基礎

Shell的陣列就是把有限個元素(變數或字元內容)用一個名字命名,然後用編號對它們進行區分的元素集合。這個名字就稱為陣列名,用於區分不同內容的編號就稱為陣列下標。組成陣列的各個元素(變數)稱為陣列的元素,有時也稱為下標變數
陣列也是一種變數變數,所以變數子串的相關功能陣列也同樣適用,陣列下標預設是從0開始計數的。

陣列的相關知識通過man bash然後搜Arrays來了解。

1. 定義陣列

1) 靜態命名陣列

  • 方法1[推薦]
    array1=(1 2 3)
  • 方法2
array2=(
www.baidu.com
www.sina.com
)
  • 方法3
    array=([0]=one [1]=two [2]=three [3]=four)

2) 動態命令建立陣列

array=($(ls))
array=(`ls`)

2. 列印陣列

1) 列印所有元素:

$(array[@])
$(array[*])

2) 列印陣列長度:

$(#array[@])
$(#array[*])

3) 列印單個元素:

$(array[i])

3. 增改陣列資料

1) 增改

array[0]=one
array[1]=two
array[2]=three

如果對應的下標值不存在,則新賦值,如果已存在,則會覆蓋原值

4. 刪除陣列資料

因為陣列本質上還是變數,因此可通過“unset 陣列[下標]”清除相應的陣列元素,如果不帶下標,表示清除整個陣列的所有資料。

unset array[1]
unset array

5. 切片和替換[變數子串]

陣列也是變數,因此也適合於前面講解過的變數的子串處理的功能應用。

1) 切片功能

array=(1 2 3 4 5)
echo ${array[@]:1:3}

2 3 4
從下標為1的元素開始擷取,共取3個數組元素。其他用法參考變數子串的用法

2) 替換

array=(1 2 3 1 1)   
echo ${array[@]/1/b}

b 2 3 b b
把陣列中的1替換成b,原陣列未被修改,和sed很像。其他用法參考變數子串的用法
呼叫方法是:${陣列名[@或*]/查詢字元/替換字元} 該操作不會改變原先陣列

二、案例

1. 內容列印陣列元素個數

  • array=(1 2 3 4 4) && echo ${array[@]}
    1 2 3 4 4
  • echo ${#array[@]}
    5
  • echo ${array[1]}
    2

陣列下標預設是從0開始計數的

2. for迴圈列印陣列

用陣列和for迴圈將“i am oldboy my teacher is luogang”這句話中,字元數小於等於6個的單詞打印出來

  • cat /server/scripts/d1.sh
#!/bin/bash
array=(i am oldboy my teacher is luogang)
for n in ${array[*]}
do
  if [ `echo $n|wc -L` -le 6 ]
    then
      echo $n
  fi
done
echo -----------------
for((i=0;i<${#array[*]};i++))
do
  if [ ${#array[i]} -le 6 ]
    then
      echo ${array[i]}
  fi
done
  • sh /server/scripts/d1.sh