• 数组基本概述


    1. 数组基本概述

    01. 什么是数组?

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

    02. 数组的分类

    Shell数组分为普通数组和关联数组。

    普通数组:只能使用整数作为数组索引。

    关联数组:可以使用字符串作为数组索引。

    img

    img

    2. 数组基本使用

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

    #普通数组赋值方式

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

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

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

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

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

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

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

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

    [root@qiudao ~]# declare -a array
    

    2.统计数组元数的个数''

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

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

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

    4.从数组索引1开始

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

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

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

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

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

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

    关联数组赋值

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

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

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

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

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

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

    4.查看关联数组

    [root@qiudao ~]# declare -A
    

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

    1.访问数组中的第二个元数

    [root@qiudao ~]# echo ${tt_array2[index2]}
    jack
    

    2.访问数组中所有元数

    等同于 echo ${array1[*]}

    [root@qiudao ~]# echo ${tt_array2[@]}
    bash shell tom jack alice
    

    3.访问数组中所有元数的索引

    [root@qiudao ~]# echo ${!tt_array2[@]}
    index4 index1 index2 index3
    

    3. 数组遍历与循环

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

    方式二:通过数组元数的索引进行遍历(推荐) 注意: 将统计的对象作为数组的索引,仅针对关联数据。

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

    [root@qiudao ~]# 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@qiudao ~]# 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@qiudao ~]# declare -A array_passwd
    [root@qiudao ~]# array_passwd=([/bin/bash]=1 [/sbin/nologin]=1)
    [root@qiudao ~]# let array_passwd[/bin/bash]++
    [root@qiudao ~]# let array_passwd[/sbin/nologin]++
    [root@qiudao ~]# echo ${!array_passwd[@]}
    /sbin/nologin
    

    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. 统计tOp的状态信息

    [root@qiudao ~]# 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
    
  • 相关阅读:
    .net C# 利用Session防重复点击防重复提交
    子报表修改后需要重新导入,0.00显示.00的调整方法
    svn错误 svnserve.conf:12: Option expected解决办法
    mysql远程访问 登录ERROR 1130: is not allowed to connect to this MySQL server解决办法
    phpmyadmin新加用户登陆不了,测试解决方案。
    自己封装的php Curl并发处理,欢迎提出问题优化。
    js和php计算图片自适应宽高算法实现
    jquery获取浏览器宽高
    swftools中的pdf2swf转换Error overflow ID 65535 解决办法
    php 根据ip获取城市以及网络运营商名称(利用qqwry.dat)
  • 原文地址:https://www.cnblogs.com/1naonao/p/11734951.html
Copyright © 2020-2023  润新知