shell编程数组

一.数组
数组简介
变量:用一个固定的字符串,代替一个不固定字符串。
数组:用一个固定的字符串,代替多个不固定字符串。
类型
普通数组:只能使用整数作为数组索引
关联数组:可以使用字符串作为数组索引
图示
在这里插入图片描述总结
变量切片有个索引的概念。一个索引(整数)对应一个字符。
普通数组:中的索引对应一个字符串。
关联数组:数组中的索引可以使用字符串。
1.普通数组
定义数组:方法一: 一次赋一个值,数组名[下标]=变量值
在这里插入图片描述方法二
# 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)

访问数组元素:
元素包括索引和索引值
#echo ${array1[0]} 访问数组中的第一个元数
# echo ${array1[@]} 访问数组中所有元数 等同于 echo ${array1[*]}
# echo ${#array1[@]} 统计数组元素的个数
# echo ${!array2[@]} 获取数组元素的索引
# echo ${array1[@]:1} 从数组下标1开始
# echo ${array1[@]:1:2} 从数组下标1开始,访问两个元素

2.关联数组
定义关联数组:切记:先声明关联数组
方法一: 一次赋一个值,数组名[索引]=变量值

在这里插入图片描述修改某个值 [root@localhost-111 ~]# unset lol [root@localhost-111 ~]# declare -A lol [root@localhost-111 ~]# lol[down1]=aaa [root@localhost-111 ~]# lol[down2]=bbb [root@localhost-111 ~]# lol[down3]=ccc [root@localhost-111 ~]# echo ${lol[@]} aaa bbb ccc [root@localhost-111 ~]# lol[down2]=ddd [root@localhost-111 ~]# echo ${lol[@]} aaa ddd ccc

方法二: 一次赋多个值
# declare  -A  ass_array2
# ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')

查看数组:declare -A

访问数组元素:
	# echo ${ass_array2[index2]} 访问数组中的第二个元数
# echo ${ass_array2[@]} 访问数组中所有元数 等同于 echo ${array1[*]}
# echo ${#ass_array2[@]} 获得数组元数的个数
# echo ${!ass_array2[@]} 获得数组元数的索引

数组和循环
1:通过循环定义和显示数组
2:通过数组统计数据
案例:

案例1:while脚本快速定义数组
	定义数组
		#!/bin/bash
#循环读取文件,定义数组
while read line
do
#hosts:数组名
#[++i]:索引递增,++i是1开始,i++是0开始。
#$line:值,即文件中的内容
        hosts[++i]=$line
done < /etc/hosts



#输出索引每一行
for i in ${!hosts[@]}
do
echo "$i  :   ${hosts[$i]}"
done
	测试数组
		[root@localhost ~]# bash array1.sh
“数组hosts first:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4”

1  :   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2  :   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

案例2:for脚本快速定义数组
	定义数组
		[root@localhost ~]# vim for_array.sh 
#!/bin/bash
#2020
#for array
for line in `cat /etc/hosts`
do
        hosts[++i]=$line
done
for i in ${!hosts[@]}
do
echo "$i:  ${hosts[$i]}"
done

	测试数组
		[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

	区别
		for的空格分割
		解决方法
			如何解决for的空格分割的问题。使用IFS=$’\n’  重新定义分隔符。
另外,如果脚本中还有for怎么办呢?储存变量,还原变量
		解决示例
			

在这里插入图片描述案例3:数组统计性别 vim wed.txt
1 定义性别文件
在这里插入图片描述2 定义脚本统计性别
在这里插入图片描述3 测试脚本
在这里插入图片描述案例4:使用数组统计,用户shell的类型和数量

在这里插入图片描述验证结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值