10.shell数组

news2024/12/26 11:20:35

shell数组

      • 数组基本概述
        • 什么是数组
        • 数组的分类
          • 普通数组
          • 关联数组
        • 数组的遍历与循环
          • 案例1:
          • 案例2:
          • 案例3:
          • 案例4:

数组基本概述

什么是数组

数组其实也算是变量,传统的变量只能存一个值,但是数组可以存多个值。

实际使用中主要通过for循环遍历数组中的数据
在awk、zabbix低级自动发现会使用到

数组的分类

shell数组分为普通数组和关联数组
普通数组:只能使用整数 作为数组索引
关联数组:可以使用字符串作为数组索引


普通数组

定义普通数组格式:数组名=(值1 值2 值3)

数组名[索引]=xxx
books[0]=python
books[1]=java

在这里插入图片描述

索引是从0开始的
在这里插入图片描述
直接当变量输出,只会打印一个值
在这里插入图片描述
echo ${books[@]} 使用 @输出所有索引内容
在这里插入图片描述
echo ${!books[@]} 加一个!输出所有的索引
在这里插入图片描述

books=(linux nginx python) #定义普通数组

echo ${books[1]} #输出指定索引内容,指定索引,得到索引的值

关联数组

定义关联数组格式:数组名=([索引]=值 [索引1]=值1 [索引2]=值2 )

在这里插入图片描述

关联数组定义之前需要先申明
declare -A info

定义关联数组
info=([name]=oldxu [age]=12 [skill]=linux [books]=python)

获取关联数组中的所有数据
echo ${info[@]}

获取关联数组中的所有索引
echo ${!info[@]}

获取关联数组中某一索引的值
echo ${info[name]}

在这里插入图片描述


数组的遍历与循环

其实就是对数组进行批量赋值,然后通过循环的方式批量取出数组的值,对取出的内容进行统计。

例如需要统计一个文件中某个字段出现的次数
思路就是:要统计谁,就将谁作为数组的索引,然后看它出现的次数,仅支持关联数组。

数组遍历的两种方式
1.通过数组的个数进行遍历(不推荐)
2.通过数组的索引进行遍历(推荐)

案例1:
#!/bin/bash

while read line #read line命令用于读取文件中的每一行,并将其存储在line变量中.
do
hosts[i++]=$line #数组赋值#每循环一次索引自增1次,将文件中对应行的内容赋值给数组的索引
done</tmp/hosts #读取/tmp/hosts文件

#将赋值步骤拆解开就是以下效果:
    #hosts[0]=127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    #hosts[1]=::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    #hosts[2]=
    #hosts[3]=10.0.10.10 www.test.com

#遍历数组
for i in ${!hosts[@]} #${!hosts[@]}数组hosts中的所有索引
do
echo "索引为:$i ,索引对应的值为:${hosts[$i]}"
done

脚本执行效果:
在这里插入图片描述


案例2:

使用关联数组统计文件中的男女性别

ck 男
alice 女
tom 男
rose 女
robin 男
sam 男

以性别作为key,出现次数作为value构建关联数组

#!/bin/bash

declare -A list #申明数组

while read line
do
gender=$(echo $line|awk '{print $2}') #获取到文件中每行的性别

#要统计性别,就将性别作为索引,然后让其出现相同性别的时候进行自增
let list[$gender]++

done</tmp/gender.txt

#遍历数组
for i in ${!list[@]}
do
echo "索引为:$i ,索引出现的次数为:${list[$i]}"
done

脚本执行效果:

在这里插入图片描述


使用awk实现性别统计的效果
在这里插入图片描述


使用常规的方法实现性别统计的效果

sort 排序
uniq -c 在每行前面显示该行重复出现的次数

在这里插入图片描述


案例3:

统计/etc/passwd 中 Shell的类型,出现的次数。

常规方法获取:
在这里插入图片描述


awk的方法获取:
在这里插入图片描述


以shell类型作为key,出现次数作为value构建关联数组

#!/bin/bash

declare -A passwd #申明数组

while read line
do
type=$(echo $line|awk -F ':' '{print $7}') #获取到文件中每行的shell类型

#要统计shell类型,就将shell类型作为索引,然后让其出现相同shell类型的时候进行自增
let passwd[$type]++

done</etc/passwd

#遍历数组
for i in ${!passwd[@]}
do
echo "(索引)shell类型为:$i ,该类型出现的次数为:${passwd[$i]}"
done

脚本执行的效果:
在这里插入图片描述


案例4:

使用Shell数组,去统计nginx日志TOP的IP地址。

#!/bin/bash

declare -A accesslog #申明数组

while read line
do
ip=$(echo $line|awk '{print $1}') #获取到文件中每行的访问ip

#要统计ip,就将ip作为索引,然后让其出现相同ip的时候进行自增
let accesslog[$ip]++

done</etc/nginx/logs/access.log

#遍历数组
for i in ${!accesslog[@]}
do
echo "(索引)ip地址:$i ,访问的次数:${accesslog[$i]}"
done

脚本执行效果:
在这里插入图片描述


常规方法统计:
cat /etc/nginx/logs/access.log |awk '{print $1}'|sort|uniq -c|sort -nr

sort 参数
-n:对文件进行数字排序
-r:按相反顺序排序
在这里插入图片描述


awk方法统计:
awk '{ip[$1]++} END { for (i in ip) {print "IP地址:"i,"访问"ip[i] " 次"}}' /etc/nginx/logs/access.log
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【万字长文】看完这篇yolov4详解,那算是真会了

前言 目标检测作为计算机视觉领域的一个核心任务&#xff0c;其目的是识别出图像中所有感兴趣的目标&#xff0c;并给出它们的类别和位置。YOLO&#xff08;You Only Look Once&#xff09;系列模型因其检测速度快、性能优异而成为该领域的明星。随着YOLOv4的推出&#xff0c;…

16 秒杀场景如何保证命中的存储分片不挂

从“第 12 讲”到“第 14 讲”&#xff0c;我们介绍了可以应对百万并发扣减请求&#xff0c;以及同时能够保障高性能的架构方案。此外&#xff0c;上述的架构方案还具备水平扩展能力&#xff0c;即当流量增加后&#xff0c;可以通过扩容底层存储和应用服务器来应对。 但面对百…

7-29 删除字符串中的子串

题目链接&#xff1a;7-29 删除字符串中的子串 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码&#xff08;python&#xff09; 1. 代码实现 str1 input().split(\n)[0] str2 input().split(\n)[0] while str2 in str1:str1 str1.replace(str2, "") // 删…

Elasticsearch概念 使用docker安装Elasticsearch和kibana

目录 一、Elasticsearch概念 倒排索引和正向索引 正向和倒排 二、ES安装 三、安装 kibana 四、IK分词器 下载ES中文分词器 扩展或停用词条 一、Elasticsearch概念 倒排索引和正向索引 正向索引 就像在mysql数据中搜索非主键字段的内容&#xff0c;就需要逐条数据的去查…

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍&#xff0c;恢复因丢失的连接&#xff0c;网络问题&#xff0c;计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器&#xff0c;以使用独特的“高级浏…

记录一次 vue3 + ele pls 改写 饿了么主题色实践

一、改写 element 主题色 在 main.ts 中引入需要改写的 scss 文件 main.ts: import ./styles/element-plus.scss在自定义的 element-plus.scss 文件中改写 ele pls 的变量 element-plus.scss&#xff1a; /** * 更改主题色 */ :root {--el-color-primary: #285fbb; // 主…

【智能算法】土拨鼠优化算法(PDO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;AE Ezugwu等人受到土拨鼠觅食行为与自然行为启发&#xff0c;提出了土拨鼠优化算法&#xff08;Prairie Dog Optimization algorithm, PDO&#xff09;。 2.算法原理 2.1算法思…

取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 &#xff0c;编译器默认会生成。 class Date { public : //这两个运算符一般不需要重载&#xff0c;使用编译器生成的默认取地址的重载即可&#xff0c;只有特殊情况&#xff0c;才需 //要重载&#xff0c;比如想让别人获取到指定的内容…

第十五届蓝桥杯省赛第二场PythonB组A题【进制】题解(AC)

解题思路 按照题意进行模拟&#xff0c;计算 x x x 的 b b b 进制过程中&#xff0c;若出现余数大于 9 9 9&#xff0c;则说明 x x x 的 b b b 进制一定要用字母进行表示。 x 8100178706957568def check(x, b):while x:if x % b > 10:return Falsex // breturn True…

网络准入设备和软件有哪些 推荐八款网络准入设备

网络准入设备是确保网络安全的重要组成部分&#xff0c;它们负责控制和管理哪些设备能够接入网络以及如何接入。以下是一些常见的网络准入设备和软件。 1.认证服务器&#xff1a; 这是网络准入控制的核心组件&#xff0c;负责对用户或设备进行身份验证。常见的认证协议包括RAD…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages&#xff08;GitHub 常用语言统计&#xff09;使用细则 3、Visitor Badge&#xff08;GitHub 访客徽章&#xff09;4、社交统计5、打字特效6、省略展示小猫 &#x1f…

echarts实现水滴图

使用echarts实现水滴图 引入依赖&#xff0c;echarts-liquidfill3兼容echarts5; 安装依赖 "echarts": "^5.4.3","echarts-liquidfill": "^3.1.0",npm install echarts-liquidfill3.1.0 -S实现的效果图 构建一个水滴图的页面 <tem…

动态规划|714.买卖股票的最佳时机含手续费

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices, int fee) {int n prices.size();vector<vector<int>> dp(n, vector<int>(2, 0));dp[0][0] - prices[0]; // 持股票for (int i 1; i < n; i) {dp[i][0] max(dp[i …

交直流充电桩检测的基础知识

交直流充电桩检测是电动汽车充电设施的重要组成部分&#xff0c;其目的是确保充电桩的正常运行&#xff0c;保障电动汽车的安全充电。以下是关于交直流充电桩检测的一些基础知识。 我们需要了解什么是交直流充电桩&#xff0c;简单来说&#xff0c;交直流充电桩是一种为电动汽车…

本地部署 Meta Llama3-8b

Meta Llama 3(8B) Instruct model performance Meta Llama 3(8B) Pre-trained model performance 使用 Ollama 运行 Llama3 访问 Tags llama3&#xff0c;选择你想运行的模型&#xff0c;例如&#xff0c;8b-instruct-q8_0 拷贝并运行命令&#xff0c;ollama run llama3:8b-…

快速计算乘法法则

快速计算乘法法则 简便算法的原理算法的实现1.和为偶数2.和为奇数3.总结及注意事项 实战演练 简便算法的原理 我们发现乘法一共只有两种&#xff0c;分别是两因数和为奇数与和为偶数。和为奇数的两数之和总可以拆成两个相邻的数&#xff08;如 13 6 7 13 67 1367&#xff…

【论文阅读】ESRT-Transformer for Single Image Super-Resolution

ESRT-Transformer for Single Image Super-Resolution 论文地址摘要1. 引言2.相关工作2.1 基于 CNN 的 SISR 模型2.2 Vision Transformer Transformer 3. Efficient Super-Resolution Transformer3.1. Lightweight CNN Backbone (LCB)3.2. High-frequency Filtering Module (HF…

(十一)Servlet教程——Request请求转发

1.Web应用在处理客户端的请求的时候&#xff0c;一般的时候都需要多个资源协同处理&#xff0c;比如先经过一个Servlet的处理&#xff0c;然后再经过另外一个Servlet的处理。但是在一个Servlet中又不能直接调用另外一个Servlet的service方法&#xff0c;所以Servlet就提供了请求…

c++ primer plus(2)

前言 延续上一讲的内容&#xff0c;今天来写一写这本书的第三章&#xff1a;处理数据 好吧&#xff0c;本次博客仍然是总结重点内容 简单变量 在本书中变量有三个属性 1信息存储在什么地方 2要存储什么 3存储类型 比如 int braincount; braincount5; 这两行代码体现了…

找不到mfc140u.dll文件如何处理?这三种方法帮你快速修复mfc140u.dll

当你的电脑出现提示&#xff0c;显示找不到mfc140u.dll文件&#xff0c;从而无法继续执行代码&#xff0c;你需要知道如何应对这种情况。今天我们就来详细说明如何解决mfc140u.dll文件丢失的问题&#xff0c;并对该文件进行详细分析。这个文件是Microsoft Visual Studio的一个重…