• (十一)数组array


    变量:只能存一个值,数组可以存多个值

    (1)普通数组,索引下标是整数:

    1)定义:

    方法一:一次赋一个值;语法:数组名[下标]=变量值
    array[1]=linux
    array[2]=shell
    方法二:一次赋多个值;数组名=(变量值1 变量值2)
    arrar1=(linux shell awk openstack [20]=docker)

    2)引用:获取数组索引变量

    语法:echo ${数组名[索引]}
    echo ${books[3]}

    (2)关联数组,索引下标是字符串:

    1)定义关联数组:

    语法:declare -A 数组名; 数组名=([索引]=变量值)

    declare -A info1
    info1=([name]=jack [sex]=male [age]=28 [height]=170 [skill]=cloud)   #info1是数组名,[name]:是数组索引下标; jack是数组元素
    

    (3)访问数组元素:

    访问数组中的元素:echo ${数组名[索引]}; echo ${info1[name]}
    访问数组中的所有元素:echo ${数组名[@]} 等同于echo ${数组名[*]}
    统计数组的元素的个数:echo ${#数组名[@]}
    获取数组的索引:echo ${!数组名[@]} #非常重要

    (4)遍历数组:通过数组索引遍历元素;把要统计的对象作为数组的索引

    • 例1:遍历数组:while方式
    #!/bin/bash
    while read line
    do
            hosts[i++]=$line
    done </etc/hosts
    #遍历数组
    for i in ${!hosts[@]}
    do
            echo "$i:${hosts[$i]}"
    done
    
    • 例2:遍历数组,for循环
    #!/bin/bash
    old_IFS=$IFS
    IFS=$'
    '
    for line in $(cat /etc/hosts)
    do
            hosts[++i]=$line
    done
    for i in ${!hosts[@]}
    do
            echo "$i:${hosts[$i]}"
    done
    IFS=$old_IFS
    
    • 例3:统计性别
    #!/bin/bash
    declare -A sex
    while read line 
    do
            type=$(echo $line|awk '{print $2}')
            let sex[$type]++
    done <sex.txt
    for i in  ${!sex[*]}
    do
            echo "$i:${sex[$i]}"
    done
    
    # cat sex.txt 
    jack01 m
    jack02 f
    jack03 m
    jack04 f
    
    • 例4:统计shell种类
    #!/bin/bash
    declare -A count
    while read line 
    do
            type=$(echo $line|awk -F ':' '{print $NF}')
            let count[$type]++
    done </etc/passwd
    for i in ${!count[@]}
    do
            echo "$i: ${count[$i]}"
    done
    
    • 例5:统计tcp连接状态数量
    #!/bin/bash
    while true
    do
            unset tcp_count
            declare -A tcp_count
            type=$(ss -an | grep :80 | awk '{print $2}')
            for i in $type
            do
                    let tcp_count[$i]++
            done
            for j in ${!tcp_count[@]}
            do
                    echo "$j:${tcp_count[$j]}"
            done
            sleep 1
            clear
    done
    
  • 相关阅读:
    css 样式 图片平铺整个界面
    div垂直居中 css div盒子上下垂直居中
    .net 日期格式转换
    一个DIV三列布局100%高度自适应的好例子(国外)
    TFS2012团队管理基本配置及基础使用方法
    转-CSS3 圆角(border-radius)
    webpack进阶用法你都get到了么?
    webpack4的配置你都掌握了么?
    初入webpack
    番外篇:一篇读懂浏览器结构
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/8919309.html
Copyright © 2020-2023  润新知