数组分类
1 2 |
● 普通数组:只能使用整数作为数组索引(元素的下标) ● 关联数组:可以使用字符串作为数组索引(元素的下标) |
数组的定义
一次赋予一个值
1 2 3 4 5 |
数组名[索引下标]=值 array[0]=v1 array[1]=v2 array[2]=v3 array[3]=v4 |
一次赋予多个值
1 2 3 4 5 6 7 8 |
数组名=(索引=值1 索引=值2 索引=值3 ...) array=([0]=var1 [1]=var2 [2]=var3 [3]=var4) 将文件中每一行赋值给array1数组 array1=(`cat /etc/passwd`) 数组名=(值1 值2 值3 ...) array=(var1 var2 var3 var4) |
数组的读取
1 2 3 4 5 6 7 8 9 10 11 |
echo ${array[0]} #获取数组里第一个元素 echo ${array[-1]} #获取数组里最后一个元素 echo ${array[*]} #获取数组里的所有元素 echo ${array[@]} #获取数组里的所有元素 echo ${!array[@]} #获取数组元素的索引下标 echo ${!array[*]} #获取数组元素的索引下标 echo ${#array[*]} #获取数组里所有元素个数 echo ${#array[@]} #获取数组里所有元素个数 |
修改/添加数组元素
1 2 3 4 5 6 7 |
[root@lb01 ~]# unset array [root@lb01 ~]# array=(clf 18 male) [root@lb01 ~]# array[0]="EGON" # 修改 [root@lb01 ~]# array[3]="IT" #添加 [root@lb01 ~]# declare -a |tail -1 declare -a array='([0]="EGON" [1]="18" [2]="male" [3]="IT")' |
删除数组元素
1 2 3 4 5 6 7 |
[root@lb01 ~]# declare -a |tail -1 declare -a array='([0]="EGON" [1]="18" [2]="male" [3]="IT")' [root@lb01 ~]# unset array[0] [root@lb01 ~]# unset array[2] declare -a array='([1]="18" [3]="IT")' [root@lb01 ~]# unset array |
数组内元素的截取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@lb01 ~]# array=(clf 18 male IT 1.80) [root@lb01 ~]# echo ${array[*]:1} # 从索引1开始,一直到最后 18 male IT 1.80 [root@lb01 ~]# echo ${array[*]:1:3} # 从索引1开始,访问3个元素 18 male IT [root@lb01 ~]# echo ${array[*]#one} # 删除one元素 two three four five fire [root@lb01 ~]# echo ${array[*]#f*e} # 删除以f开头且以e结尾的元素 one two three four |
数组内容的替换
1 2 3 4 5 6 7 8 |
[root@lb01 ~]# array=(one two three four five fire) [root@lb01 ~]# echo ${array[*]/five/abc} # 将five元素替换为abc one two three four abc fire [root@lb01 ~]# echo ${array[*]/f*e/abc} # 将以f开头e结尾的元素替换为abc one two three four abc abc |
关联数组
关联数组:可以使用字符串作为数组索引,需要用declare -A声明
1 2 3 4 5 6 7 |
[root@lb01 ~]# declare -A info [root@lb01 ~]# info["name"]="egon" [root@lb01 ~]# info["age"]=18 [root@lb01 ~]# info["gender"]="male" [root@lb01 ~]# declare -A |grep info declare -A info='([gender]="male" [name]="egon" [age]="18" )' |
遍历数组
方法一: 利用获取所有信息进行遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 例1 declare -A array array=(["name"]="egon" ["age"]=18 ["gender"]="male") for item in ${array[*]} do echo $item done # 例2 array=("egon" 18 "male") for item in ${array[*]} do echo $item done |
方法二: 通过数组元素的索引进行遍历
1 2 3 4 5 6 7 |
array=("egon" 18 "male") for i in ${!array[*]} # echo ${!array[*]} 直接获取所有元素的索引信息 do echo $i echo ${array[i]} done |
方法三:根据数组长度信息进行遍历
1 2 3 4 |
array=("egon" 18 "male") for((i=0;i<${#array[*]};i++)) do echo "$i:${array[$i]}" done |
从文件中读取
1 2 3 4 5 6 |
declare -A arry while read line do let arry[`echo $line | cut -d: -f7`]++ done < /etc/passwd declare -A |grep arry |