一、普通数组
普通数组在定义时,索引号
如果是方法一,则索引号及对应的值是规定好的
如果是方法二,则索引号是默认的,从 0 开始。
1、定义数组
(1)方法一: 一次赋一个值
数组名[下标]=变量值
array1[0]=pear
查看数组
[root@localhost ~]# declare -a | grep array1
[root@localhost ~]# echo ${array1[@]}
(2)方法二: 一次赋多个值
# array2=(tom jack alice)
# array3=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3
# array4=(`ls /var/ftp/Shell/for*`)
# array5=(tom jack alice "bash shell")
# colors=($red $blue $green $recolor)
# array6=(1 2 3 4 5 6 7 "linux shell" [20]=saltstack)
(3)访问数组元数:
# echo ${array1[0]} 访问数组中的第一个元数
# echo ${array1[@]} 访问数组中所有元数 等同于 echo ${array1[*]}
# echo ${#array1[@]} 统计数组元素的个数
# echo ${!array2[@]} 获取数组元素的索引
# echo ${array1[@]:1} 从数组下标1开始
# echo ${array1[@]:1:2} 从数组下标1开始,访问两个元素
二、关联数组
关联数组一定要先声明。
1、定义关联数组
(1)方法一: 一次赋一个值
数组名[索引]=变量值
# declare -A ass_array1
# ass_array1[index1]=1
# ass_array1[index2]=2
# ass_array1[index3]=3
# ass_array1[index4]=4
查看数组
[root@localhost ~]# echo ${ass_array1[@]}
[root@localhost ~]# declare -A ass_array1 (指定查看某个数组)
[root@localhost ~]# declare -A (查看所有的关联数组)
(2)方法二: 一次赋多个值
# declare -A ass_array2
# ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')
(3)访问数组元素
# echo ${ass_array2[index2]} 访问数组中的第二个元数
# echo ${ass_array2[@]} 访问数组中所有元数 等同于 echo ${array1[*]}
# echo ${#ass_array2[@]} 获得数组元数的个数
# echo ${!ass_array2[@]} 获得数组元数的索引
三、数组和循环
通过循环 定义和显示数组
通过数组 统计数据
1、案例1:while脚本快速定义数组
(1)定义数组
declare -A shells // 声明数组 shells
while read ll // 通过重定向将文本内容交给 while 去循环。
// while 通过 借助 read 读取文件内容
// while 以回车作为默认行 每行内容较多,
故,定义一个变量 ll ,将每行内容交给变量 ll ,方面后续调用每行内容
do
tt=`echo $ll | awk -F: '{print $7}'` // echo 调用变量,直接输出每行内容了。
// 如果把 echo的输出 交给 awk ,则可以按需截取每段内容
let shells[$tt]++ // let 运算 (自增)。
done < /etc/passwd // 重定向把内容输给 while 循环
for i in ${!shells[*]} // for 循环
do
echo "$i : ${shells[$i]}" // echo 输出
done // 循环结束
(2)测试数组
[root@localhost ~]# bash array1.sh
1 : 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
2 : ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
2、案例2:for脚本快速定义数组
(1)定义数组
[root@localhost ~]# vim for_array.sh
#!/bin/bash
for line in `cat /etc/hosts`
do
hosts[++i]=$line // 定义数组
done
for i in ${!hosts[@]}
do
echo "$i: ${hosts[$i]}"
done
(2)测试数组
[root@localhost ~]# bash for_array.sh
1: 127.0.0.1
2: localhost
3: localhost.localdomain
4: localhost4
5: localhost4.localdomain4
6: ::1
7: localhost
8: localhost.localdomain
9: localhost6
10: localhost6.localdomain6
(3)案例3:数组统计性别
(4)案例4:使用数组统计,用户shell的类型和数量