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. maven 配置阿里云镜像

    编辑%maven_home%/conf/settings.xml文件,添加 <mirror> <id>aliyun-maven</id> <mirrorOf& ...

  2. 032:DTL常用过滤器(1)

    为什么需要过滤器: 在DTL中,不支持函数的调用形式‘()’,因此不能给函数传递参数,这将有很大的局限性:而过滤器其实就是一个函数,可以对需要处理的参数进行处理,并且还可以额外接受一个参数(也就是说: ...

  3. 【java】Split函数踩坑记

    先看一段代码: String line = "openssh|7.1"; String[] pkg = line.split("|"); System.out. ...

  4. go mac 交叉编译 linux

    CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags '-w' -o server ./server.go

  5. Linux启动redis提示 /var/run/redis_6379.pid exists, process is already running or crashed

    执行启动命令:service redisd start 提示信息:/var/run/redis_6379.pid exists, process is already running or crash ...

  6. NIO编程之多客户端聊天系统

    1. 服务端 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; im ...

  7. 关于SQL Server系统数据库详解

    介绍这里我们介绍SQL Sever内部的系统数据库的作用和用户数据库之间联系,关于SQL Sever如何管理用户数据库的原理,对于每个数据库开发人员和DBA都是必须掌握的. SQL Sever系统数据 ...

  8. Solr索引数据

    一般来说,索引是系统地排列文档或(其他实体).索引使用户能够在文档中快速地查找信息. 索引集合,解析和存储文档. 索引是为了在查找所需文档时提高搜索查询的速度和性能. 在Apache Solr中的索引 ...

  9. PHP读取XML文件数据获取节点值

    最近在接入渠道的时候遇到接口返回是xml数据.现在接口数据返回json数据格式比较常见. 如何获取xml里面真正数据? 对象结果集合单个值的强制转换处理.(直接代码说明) demo示例:  创建xml ...

  10. Linux shell 归纳之 cp

    1. 复制文件夹folder1(包括所有子文件夹和文件), 并命名为folder2 # cp -r /usr/folder1 folder2 2. 复制文件file1 到它的上一级的目录的abc文件夹 ...