Shell06---数组应用

1. 数组基本概述

01. 什么是数组?

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

02. 数组的分类

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



2. 数组基本使用

01. 普通数组仅能使用整数来作为索引

#普通数组赋值方式

1.方式一:针对每个索引进行赋值

[root@gjy ~]# array1[0]=pear
[root@gjy ~]# array1[1]=apple
[root@gjy ~]# array1[2]=orange
[root@gjy ~]# array1[3]=peach

2.方式二:一次赋多个值,数组名=(多个变量值)

[root@gjy ~]# array2=(tom jack alice)
[root@gjy ~]# array3=(tom jack alice "bash shell")
[root@gjy ~]# array4=(1 2 3 "linux shell" [20]=puppet)

3.方式三:将该文件中的每一个列作为一个元数赋值给数组array5,默认以空格为分割符

[root@gjy ~]# array5=(`cat /etc/passwd`)

02. 如何查看普通数组的赋值与访问数组的内容

1.定义普通数组,其实也可以不用定义

[root@gjy ~]# declare -a array

2.统计数组元数的个数

[root@gjy ~]# echo ${#array1[@]}
4

3.访问数组中的第一个元素

[root@gjy ~]# echo ${array1[0]}
pear

4.从数组索引1开始

[root@gjy ~]# echo ${array1[@]:1}
apple orange peach

5.从数组索引1开始,访问两个元素

[root@gjy ~]# echo ${array1[@]:1:2}
apple orange

6.访问数组中所有数据,相当于echo ${array1[*]}

[root@gjy ~]# echo ${array1[@]}
pear apple orange peach

03. 关联数组能使用字符串的方式作为索引

关联数组赋值

1.定义关联数组, 申明是关联数据

[root@gjy ~]# declare -A tt_array_1
[root@gjy ~]# declare -A tt_array_2

2.方式一:给关联数组进行赋值,数组名[索引]=变量值

[root@gjy ~]# tt_array1[index1]=pear
[root@gjy ~]# tt_array1[index2]=apple
[root@gjy ~]# tt_array1[index3]=orange
[root@gjy ~]# tt_array1[index4]=peach

3.方式二:给关联数组一次赋多个值

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

4.查看关联数组

[root@gjy ~]# declare -A

04. 如何访问关联数组中的数据。

#1.访问数组中的第二个元数
[root@gjy ~]# echo ${tt_array2[index2]}
jack
#2.访问数组中所有元数 等同于 echo ${array1[*]}
[root@gjy ~]# echo ${tt_array2[@]}
bash shell tom jack alice
#3.访问数组中所有元数的索引
[root@gjy ~]# echo ${!tt_array2[@]}
index4 index1 index2 index3

3. 数组遍历与循环

方式一:通过数组元数的个数进行遍历(不推荐) 。

**方式二:通过数组元数的索引进行遍历(推荐) **

注意: 将统计的对象作为数组的索引,仅针对关联数据。

01.普通数组赋值与遍历示例

[root@gjy ~]# cat array-1.sh
#!/usr/bin/bash
#1.使用while读入一个文件
while read line
do
#2.定义普通数组, 将读入的每行数据,单个单个进行赋值
hosts[i++]=$line
#正常定义普通数组是hosts[1]=test,只不过我们将[]变成自增
#$line是读取的文件内容
done </etc/hosts
#3.使用for循环遍历数组, 遍历数组的索引
for i in ${!hosts[@]}
do
echo "hosts数组对应的索引是:$i, 对应的值是: ${hosts[i]}"
done

02.使用关联数组统计文件中的每个Shell数量

[root@gjy ~]# cat count_passwd.sh
#!/bin/bash
declare -A array_passwd
#1.对数组进行赋值
while read line
do
type=$(echo $line|awk -F ':' '{print $NF}')
let array_passwd[$type]++
done </etc/passwd
#2.对数组进行遍历
for i in ${!array_passwd[@]}
do
echo "Shell: $i count: ${array_passwd[$i]}"
done
#步骤拆分讲解
[root@gjy ~]# declare -A array_passwd
[root@gjy ~]# array_passwd=([/bin/bash]=1 [/sbin/nologin]=1)
[root@gjy ~]# let array_passwd[/bin/bash]++
[root@gjy ~]# let array_passwd[/sbin/nologin]++
[root@gjy ~]# echo ${!array_passwd[@]}
/sbin/nologin /bin/bash
[root@gjy ~]# echo ${array_passwd[@]}
2 2

03. 统计Nginx日志IP访问次数

[root@gjy ~]# cat array_nginx_count.sh
#!/usr/bin/bash
# nginx log top 10 IP conut
declare -A array_nginx
#1.给关联数组的索引进行赋值
while read line
do
type=$(echo $line|awk '{print $1}')
let array_nginx[$type]++
done </var/log/nginx/access.log
#2.遍历数组
for i in ${!array_nginx[@]}
do
echo "IP是:$i 出现多少次: ${array_nginx[$i]}"
done

04. 统计tcp的状态信息

[root@gjy ~]# cat array_ss_state.sh
#!/usr/bin/bash
declare -A array_state
type=$(ss -ant |sed '1d' |awk '{print $1}')
#1.对数组进行的索引赋值
for i in $type
do
let array_state[$i]++
done
#2.遍历数组
for j in ${!array_state[@]}
do
echo "当前的状态是:$j,当前状态出现了多少次:${array_state[$j]}"
done

Shell06--数组应用的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  10. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

随机推荐

  1. Zabbix通过邮件发送Screen图形报表实现

    在使用Zabbix的过程中,我们通常会建立一些需要的Screen图形报表来汇总需要监控的Graph. 而下面的两个脚本,则是通过从Zabbix数据库中获取所有的Screen图形参数,提供Zabbix的 ...

  2. sys模块 json pickle模块

    # sys模块# import sys# sys.path# sys.argv# sys.exit() # 脚本退出# print('[%s]'%('#'*1))# print('[%s]'%('#' ...

  3. springboot整合hibernate案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  4. 用soapUI开发webservice接口

    1,下载soapUI软件,安装到本地 2,打开soapUI软件 3,创建一个开发好的接口 4,进行接口调用 测试:

  5. MySql 5.7.20 绿色版安装

    MySql 5.7.20 绿色版安装 一.MySql 安装 1.从官网下载绿色压缩包. 2.解压安装文件到指定目录 3.创建配置文件 my.ini 到解压文件的根目录,my.ini 配置文件如下,需将 ...

  6. Mybatis 批量插入和更新小例

    SpringBoot配置Mybatis前文有博文,数据库mysql: package com.example.demo.biz.dto; public class User { private int ...

  7. 彻底理解 Linux 的搜索工具: grep 和 awk

    grep 官方手册 awk 官方手册, awk 学习资料 1. grep grep 用于打印匹配指定模式的行. 1.1 介绍 grep 命令从输入文件中查找匹配到给定模式列表的行.发现匹配到的行后,默 ...

  8. Docker安装Web前端性能测试工具Sitespeed.io

    一.Sitespeed.io概述 1.Sitespeed.io简介 Sitespeed.io:是一款开源的Web性能测试工具,用来衡量Web网站的综合性能,帮助开发和测试人员分析网页的加载速度和渲染性 ...

  9. poj3126Prime Path (BFS+素数筛)

    素数筛:需要一个数组进行标记 最小的素数2,所有是2的倍数的数都是合数,对合数进行标记,然后找大于2的第一个非标记的数(肯定是素数),将其倍数进行标记,如此反复,若是找n以内的所有素数,只需要对[2, ...

  10. [LeetCode] 342. Power of Four(位操作)

    传送门 Description Given an integer (signed 32 bits), write a function to check whether it is a power o ...