1. 程式人生 > >Linux shell 編程(五):數組

Linux shell 編程(五):數組

array shell loop

數組

數組是有序的元素序列 。若將有限個類型相同的變量的集合命名,那麽這個名稱為數組名。組成數組的各個變量稱為數組的分量,也稱為數組的元素,有時也稱為下標變量。用於區分數組的各個元素的數字編號稱為下標。數組是在程序設計中,為了處理方便, 把具有相同類型的若幹元素按無序的形式組織起來的一種形式。這些無序排列的同類數據元素的集合稱為數組。

在shell中數組有兩種類型:

  • 索引數組(indexed arrays)
  • 關聯數組(associative arrays)

索引數組(indexed arrays)

索引數組使用數字作為下標,下標默認從0開始。

  • 聲明數組:
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# # 直接聲明
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# array=(10 20 30 40 50 60 60 80 90) # 用空格分隔
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# # 使用declare
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# declare -a arrays # 聲明一個索引數組

關聯數組(associative arrays)

關聯數組是一種具有特殊索引方式的數組。不僅可以通過整數來索引它,還可以使用字符串或者其他類型的值(除了NULL)來索引它。

  • 數組聲明
# 關聯數組聲明必須使用declare -A 方式,否則shell會將其認為是索引數組
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# declare -A info # 定義一個管理數組
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# info[‘name‘]=‘raojinlin‘ # 插入name鍵,賦值
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# info[‘age‘]=21
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# info[‘obj‘]=‘ops‘
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${info[@]} # 獲取數組
raojinlin 21 ops
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# 

數組操作

  • 訪問數組

    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${array[0]} # array[index]
    10
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~#  # 使用通配符* 或 @ 可以訪問數組中的所有元素
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${array[@]}
    10 20 30 40 50 60 60 80 90
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${array[*]}
    10 20 30 40 50 60 60 80 90
    root@iZuf6ilzd4iqvuj4dvuiwtZ:~# array[0]=10 # 將下標為0的元素賦值為10
  • 數組長度
# 語法:${#數組[@|*]}
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${#array[*]}
9
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# 
  • 獲取數組下標(鍵)
# 語法:${!數組[@|*]}
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# echo ${!info[@]}
name age obj
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# 
  • 數組遍歷

使用for循環可以遍歷數組

root@iZuf6ilzd4iqvuj4dvuiwtZ:~# for var in ${info[@]};do echo $var;done
raojinlin
21
ops
root@iZuf6ilzd4iqvuj4dvuiwtZ:~# 

Linux shell 編程(五):數組