數組
數組是有序的元素序列 。若將有限個類型相同的變量的集合命名,那麼這個名稱爲數組名。組成數組的各個變量稱爲數組的分量,也稱爲數組的元素,有時也稱爲下標變量。用於區分數組的各個元素的數字編號稱爲下標。數組是在程序設計中,爲了處理方便, 把具有相同類型的若干元素按無序的形式組織起來的一種形式。這些無序排列的同類數據元素的集合稱爲數組。
在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:~#