数组分类
普通数组:只能使用整数 作为数组索引
[root@servicex script]# linux_name=(redhat ubuntu centOS)
[root@servicex script]# echo $linux_name
redhat
[root@servicex script]# echo ${linux_name[1]}
ubuntu
[root@servicex script]# echo ${linux_name[2]}
centOS
[root@servicex script]# echo ${linux_name[@]}
redhat ubuntu centOS
[root@servicex script]# echo ${linux_name[*]}
redhat ubuntu centOS
关联数组:可以使用字符串 作为数组索引
[root@servicex script]# tt=([index1]=test1 [index2]=test2)
[root@servicex script]# echo $tt
test2
[root@servicex script]# echo ${tt[@]}
test2
注意:关联数组使用前需要先声明
[root@servicex script]# declare -A tt
[root@servicex script]# tt=([index1]=test1 [index2]=test2)
[root@servicex script]# echo ${tt[@]}
test1 test2
[root@servicex script]# echo ${tt[index1]}
test1
[root@servicex script]# echo ${!tt[@]}
index1 index2
变量的切片
[root@servicex script]# name=lalin
[root@servicex script]# echo $name
lalin
[root@servicex script]# echo ${name:1,2}
lin
[root@servicex script]# echo ${name:1}
alin
[root@servicex script]# echo ${name:1:1}
a
[root@servicex script]# echo ${name:1:2}
al
[root@servicex script]# echo ${name:1:2}
数组单个赋值、取全值、取索引
[root@servicex script]# fruit[0]=apple
[root@servicex script]# fruit[1]=banana
[root@servicex script]# fruit[2]=orange
[root@servicex script]# echo ${fruit[@]}
apple banana orange
[root@servicex script]# echo ${!fruit[@]}
0 1 2
查看数组赋值的结果
declare -a
[root@servicex script]# declare -a
declare -a BASH_ARGC='()'
declare -a BASH_ARGV='()'
declare -a BASH_LINENO='()'
declare -a BASH_SOURCE='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -a DIRSTACK='()'
declare -a FUNCNAME='()'
declare -a GROUPS='()'
declare -a PIPESTATUS='([0]="0")'
declare -a fruit='([0]="apple" [1]="banana" [2]="orange")'
declare -a linux_name='([0]="redhat" [1]="ubuntu" [2]="centOS")'
统计数组的个数
[root@servicex script]# echo ${#fruit[@]}
3
[root@servicex script]# echo ${fruit[@]}
apple banana orange
统计/ETC/PASSWD中出现的bash及次数
[root@servicex script]# ./day05/bash_count.sh
/sbin/nologin : 19
/bin/sync : 1
/bin/bash : 6
/sbin/shutdown : 1
/sbin/halt : 1
[root@servicex script]# cat day05/bash_count.sh
#!/usr/bin/bash
#Desc: count every bash type used in the /etc/passwd
#Author:lalin
#Date:2020-04-27
declare -A count_array
while read line;do
bash_name=$(echo $line | awk -F ':' '{print $7}')
let count_array[$bash_name]++
done < /etc/passwd
for i in ${!count_array[@]};do
echo "$i : ${count_array[$i]}"
done