Shell06---数组应用

1. 数组基本概述

01. 什么是数组?

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

02. 数组的分类

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



2. 数组基本使用

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

#普通数组赋值方式

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

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

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

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

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

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

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

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

  1. [root@gjy ~]# declare -a array

2.统计数组元数的个数

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

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

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

4.从数组索引1开始

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

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

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

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

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

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

关联数组赋值

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

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

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

  1. [root@gjy ~]# tt_array1[index1]=pear
  2. [root@gjy ~]# tt_array1[index2]=apple
  3. [root@gjy ~]# tt_array1[index3]=orange
  4. [root@gjy ~]# tt_array1[index4]=peach

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

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

4.查看关联数组

  1. [root@gjy ~]# declare -A

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

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

3. 数组遍历与循环

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

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

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

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

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

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

  1. [root@gjy ~]# cat count_passwd.sh
  2. #!/bin/bash
  3. declare -A array_passwd
  4. #1.对数组进行赋值
  5. while read line
  6. do
  7. type=$(echo $line|awk -F ':' '{print $NF}')
  8. let array_passwd[$type]++
  9. done </etc/passwd
  10. #2.对数组进行遍历
  11. for i in ${!array_passwd[@]}
  12. do
  13. echo "Shell: $i count: ${array_passwd[$i]}"
  14. done
  15. #步骤拆分讲解
  16. [root@gjy ~]# declare -A array_passwd
  17. [root@gjy ~]# array_passwd=([/bin/bash]=1 [/sbin/nologin]=1)
  18. [root@gjy ~]# let array_passwd[/bin/bash]++
  19. [root@gjy ~]# let array_passwd[/sbin/nologin]++
  20. [root@gjy ~]# echo ${!array_passwd[@]}
  21. /sbin/nologin /bin/bash
  22. [root@gjy ~]# echo ${array_passwd[@]}
  23. 2 2

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

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

04. 统计tcp的状态信息

  1. [root@gjy ~]# cat array_ss_state.sh
  2. #!/usr/bin/bash
  3. declare -A array_state
  4. type=$(ss -ant |sed '1d' |awk '{print $1}')
  5. #1.对数组进行的索引赋值
  6. for i in $type
  7. do
  8. let array_state[$i]++
  9. done
  10. #2.遍历数组
  11. for j in ${!array_state[@]}
  12. do
  13. echo "当前的状态是:$j,当前状态出现了多少次:${array_state[$j]}"
  14. 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. kettle 通过JDBC 连接SQL Server(Error occurred while trying to connect to the database)

    在连接数据(MS SQLServer 2008)发现:Error occurred while trying to connect to the database 然后找资料看,都不是问题所在,最后一 ...

  2. Linux下git安装配置

    一.Linux下git安装配置 2013-07-28 20:32:10|  分类: 默认分类 |  标签:linux  git  server  |举报|字号 订阅     http://abomby ...

  3. [洛谷P3145] CQOI2009 循环赛

    问题描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入格式 第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分. 输出格式 ...

  4. Oracle12c创建及删除PDB

    在12C R1版本中只支持Global Shared Undo模式,所有container共享一个UNDO表空间:在12C R2引入了PDB Local Undo模式,每个container都有自己的 ...

  5. 英语单词omitting

    omitting 来源——报错 [root@centos7 ~]# cp /etc/ /bin cp: omitting directory ‘/etc/’ [root@centos7 ~]# cp ...

  6. 如何将数组中的元组包转化为字典通过json序列化给前端

  7. Cluster基础(二):ipvsadm命令用法、部署LVS-NAT集群、部署LVS-DR集群

    一.ipvsadm命令用法 目标: 准备一台Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现如下功能: 使用命令添加基于TCP一些的集群服务 在集群中添加若干台后端真实服务 ...

  8. 安卓环境home assistant搭建

    准备搞个智能家居玩玩 先从home assistant(后面简写为HASS)开始吧 莫得树莓派,拿旧手机凑活一下 准备材料: root过的安卓机 一.安卓机Linux环境搭建 个人习惯不详细写基础环境 ...

  9. 【HDOJ6664】Andy and Maze(color coding)

    题意:给定一张n点m边的无向带权图,问从任意结点出发,不能走已经经过的点,共经过k个点的最长路径的值 n,m<=1e4,k<=6 思路:color coding算法 考虑每次给每个点随机编 ...

  10. python&数据分析&数据挖掘--参考资料推荐书籍

    1.要用python做数据分析,先得对python语言熟悉,推荐一本入门书 :笨方法学python (learn python the hard way),这本书用非常有趣的讲述方式介绍了python ...