Day 34 shell数组

一:数组

1.数组介绍

​ 是若干数据的集合,其中的每一份数据都称为元素

​ shell不限制数组的大小,理论上可以存放无限量的数据

​ 数组组成:数组名字 + 索引/下标 + 元素

2.数组分类

​ 普通数组

​ 只能使用整数作为数组索引/下标(从0开始)

​ 关联数组

​ 可以使用字符串作为数组索引/下标

3.定义数组
普通数组

​ 方法一: 一次赋一个值

数组名[索引]=变量值
[root@xingdiancloud ~]# array1[0]=pear
[root@xingdiancloud ~]# array1[1]=apple
[root@xingdiancloud ~]# array1[2]=orange
[root@xingdiancloud ~]# array1[3]=peach

​ 方法二: 一次赋多个值

[root@xingdiancloud ~]# array2=(tom jack alice)
[root@xingdiancloud ~]# array5=(tom jack alice "bash shell")
[root@xingdiancloud ~]# colors=($red $blue $green $recolor)  //元素引用变量
[root@xingdiancloud ~]# array5=(1 2 3 4 5 6 7 "linux shell" [20]=saltstack)  //指定array5[20]为saltstack
[root@xingdiancloud ~]# array8=`cat /etc/passwd`  //此时会将文件内的所有内容都赋值给array8[0]
[root@centos-2 ~]# array9=(`cat /etc/passwd`)  //此时会将文件内容以空格或回车作为分割符,赋值给array9的每一个元素
关联数组

​ 申明该数组为关联数组

[root@xingdiancloud ~]# declare -A ass_array1
[root@xingdiancloud ~]# declare -A ass_array2

​ 方法一: 一次赋一个值

数组名[索引]=变量值
[root@xingdiancloud ~]# ass_array1[index1]=pear
[root@xingdiancloud ~]# ass_array1[index2]=apple
[root@xingdiancloud ~]# ass_array1[index3]=orange
[root@xingdiancloud ~]# ass_array1[index4]=peach

​ 方法二: 一次赋多个值

[root@xingdiancloud ~]# ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')

​ 一步走

[root@xingdiancloud ~]# declare -A ass_array1='([index4]="peach" [index1]="pear" [index2]="apple" [index3]="orange" )'
[root@xingdiancloud ~]# declare -A ass_array2='([index4]="bash shell" [index1]="tom" [index2]="jack" [index3]="alice" )'
4.访问数组元素
普通数组
[root@centos-2 ~]# users=(exe bib pip)
[root@centos-2 ~]# echo $users
exe                                                 直接访问数组不指定下标,默认访问第一个数组元素
[root@xingdiancloud ~]# echo ${array1[0]}			访问数组中的第一个元素
[root@xingdiancloud ~]# echo ${array1[@]}			访问数组中所有元素  等同于 echo ${array1[*]}
[root@xingdiancloud ~]# echo ${#array1[@]}			统计数组元素的个数
[root@xingdiancloud ~]# echo ${!array2[@]}			获取数组元素的索引
[root@xingdiancloud ~]# echo ${array1[@]:1}			从数组下标1开始
[root@xingdiancloud ~]# echo ${array1[@]:1:2}		从数组下标1开始,访问两个元素
关联数组
[root@xingdiancloud ~]# echo ${ass_array2[index2]}			访问数组中的第二个元素
[root@xingdiancloud ~]# echo ${ass_array2[@]}				访问数组中所有元素  等同于 echo ${array1[*]}
[root@xingdiancloud ~]# echo ${#ass_array2[@]}				获得数组元素的个数
[root@xingdiancloud ~]# echo ${!ass_array2[@]}				获得数组元素的索引
5.数组遍历

​ 方法一: 通过数组元素的个数进行遍历

​ 方法二: 通过数组元素的索引进行遍历

案例一:利用元素进行遍历

若一个元素内存在空格时,例如"genshin impact",不要使用元素进行遍历,否则该元素会被for循环拆分成"genshin"和"impact"

#!/bin/bash
#定义数组
array=(Mon Tue Wed Thur Fir Sat Sun)
#数组遍历
for day in ${array[*]}
do
    echo $day
done

案例二:利用索引进行遍历

[root@xingdiancloud ~]# cat hello.sh
#!/bin/bash
for line in `cat /etc/hosts`
do
    hosts[++j]=$line
done

for  i in ${!hosts[@]}  //利用索引进行遍历
do
    echo "$i : ${hosts[i]}"
done
[root@xingdiancloud ~]# bash hello.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

​ 定义换行符

[root@xingdiancloud ~]# cat hello.sh
#!/bin/bash
IFS=$'\n'
for line in `cat /etc/hosts`
do
    hosts[++j]=$line  //j空值默认从0开始,由于先累加后赋值,所以数组默认从1开始
done

for  i in ${!hosts[@]}  //该数组所有的索引
do
    echo "$i : ${hosts[i]}"  //数组索引:数组元素
done
[root@xingdiancloud ~]# bash hello.sh
1 : 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2 : ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
6.项目案例

用于将文件内容逐行逐次输入变量中的固定格式

while read 变量名
do
......
done < 输入文件名

通过数组统计性别:把要统计的对象作为数组的索引

[root@xingdiancloud ~]# cat sex.txt
zhangsan f
lisi m

[root@xingdiancloud ~]# cat sex.sh
#!/usr/bin/bash
declare -A sex
while read line
do
    type=`echo $line | awk '{print $2}'`
    let sex[$type]++   // 一个空值的数组元素sex[$type]可以将其初始值视为0,经过累加后为1...
done < sex.txt
#m作为数组的索引

for i in ${!sex[@]}
do
    echo "$i : ${sex[$i]}"
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值