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. RedisTemplate 事务处理方法 watch multi exec 的使用

    @Autowired RedisTemplate<String,String> redisTemplate; redisTemplate.execute(new SessionCallba ...

  2. 【leetcode】516. Longest Palindromic Subsequence

    题目如下: 解题思路:很经典的动态规划题目,但是用python会超时,只好用C++了. 代码如下: class Solution { public: int longestPalindromeSubs ...

  3. LeetCode--057--插入区间(java)

    给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例 1: 输入: intervals = [ ...

  4. php in_array()函数 语法

    php in_array()函数 语法 作用:搜索数组中是否存在指定的值.大理石机械构件价格 语法:in_array(search,array,type) 参数: 参数 描述 search 必需.规定 ...

  5. 20180712-Java Character类

    char ch = 'a';// Unicode for uppercase Greek omega characterchar uniChar = '\u039A';//字符数组char[] cha ...

  6. Trailing Zeroes (III) -;lightoj 1138

    Trailing Zeroes (III)   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Y ...

  7. [CSP-S模拟测试]:凤凰院凶真(LCIS)

    题目描述 $\alpha$世界线.凤凰院凶真创立了反抗$SERN$统治的组织“瓦尔基里”.为了脱离$\alpha$线,他需要制作一个世界线变动率测量仪.测量一个世界线相对于另一个世界线的变动率,实质上 ...

  8. 屏幕分辨率测试工具(舍弃)---chrome开发者工具devTools(强烈建议系统学习)

    2019-01-25 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  9. 129、TensorFlow计算图的可视化

    import tensorflow as tf # Build your graph x = tf.constant([[37.0, -23.0], [1.0, 4.0]], name="i ...

  10. Jenkins+GitLab持续集成

    向GitLab提交代码之后自动触发Jenkins构建 https://baijiahao.baidu.com/s?id=1630678692475452408&wfr=spider&f ...