zoukankan      html  css  js  c++  java
  • shell 数组

    一、数组简介

    数组 是 shell 中的一种基础数据类型,用来存储大量数据。但是实际使用环境中,其实用到的并不像其他变成语言中那么多,主要是因为shell主要是为了完成一些简单的任务,并不需要太复杂的代码。但是,作为一种编程语言,了解其基础数据类型是很有必要的。

    二、数组定义的两种方式

    2.1、普通数组

    直接在数组中添加元素,不需要申明。只能通过数字进行索引取值。
    1)定义

    [root@localhost ~]# a=(1 2 3 4 5 6 7 )
    
    1. 取值
    [root@localhost ~]# echo ${a[3]} #取出索引为3对应位置的值
    4
    [root@localhost ~]# echo ${a[*]} #取出所有元素
    1 2 3 4 5 6 7
    [root@localhost ~]# echo ${a[@]} #取出所有元素
    1 2 3 4 5 6 7
    [root@localhost ~]# echo ${!a[@]} #取出所有索引
    0 1 2 3 4 5 6
    
    

    3)建立数组的另一种方式,通过赋值。

    [root@localhost ~]# b[0]=10
    [root@localhost ~]# b[1]=4
    [root@localhost ~]# b[3]=6
    [root@localhost ~]# echo ${b[@]}
    10 4 6
    
    2.2、关联数组

    关联数组需要使用关键字先声明,然后在创建
    1)定义

    [root@localhost ~]# declare -A  bb
    [root@localhost ~]# bb=([index1]=python [index2]=shell)
    
    
    1. 取值
    [root@localhost ~]# echo ${bb[index1]}
    python
    [root@localhost ~]# echo ${bb[index2]}
    shell
    [root@localhost ~]# echo ${bb[*]}
    python shell
    [root@localhost ~]# echo ${bb[@]}
    python shell
    [root@localhost ~]# echo ${!bb[@]}
    index1 index2
    
    1. 通过赋值创建
    [root@localhost ~]# declare -A c
    [root@localhost ~]# c[name]=huahua
    [root@localhost ~]# c[age]=18
    [root@localhost ~]# echo ${c[name]}
    huahua
    [root@localhost ~]# echo ${c[age]}
    18
    

    三、数组切片操作

    1、普通数组切片,遵循顾头不顾尾的原则,
    [root@localhost ~]# b[0]=10
    [root@localhost ~]# b[1]=4
    [root@localhost ~]# b[3]=6
    [root@localhost ~]# echo ${b[@]:1:2}
    4 6
    [root@localhost ~]# echo ${b[@]:1:4} 
    4 6
    [root@localhost ~]# echo ${b[@]:0:3}
    10 4 6
    [root@localhost ~]# echo ${b[@]:0:1}
    10
    
    2、关联数组切片

    不支持使用关联索引进行切片,而只能使用数字索引进行切片

    [root@localhost ~]# declare -A info
    [root@localhost ~]# info[age]=18
    [root@localhost ~]# info[name]=love2
    [root@localhost ~]# info[skill]=python
    [root@localhost ~]# echo ${info[@]}
    love2 18 python
    [root@localhost ~]# echo ${info[@]:0:1}
    love2
    [root@localhost ~]# echo ${info[@]:0:2}
    love2 18
    [root@localhost ~]# echo ${info[@]:0:3}
    love2 18 python
    

    四、数组应用

    4.1使用数组打印hosts文件,貌似有点无聊
    #!/bin/bash
    i=0
    while read line
    do
    hostarray[i++]=$line
    done </etc/hosts
    for j in ${!hostarray[*]}
    do
    	echo ${hostarray[$j]}
    done
    
    4.2、使用数组进行统计

    4.2.1) 生成统计文件

    [root@centos ~]# cat > ha.txt <<-EOF
    jh m
    nj f
    ki m
    lk m
    uh f
    EOF
    

    4.2.2)使用命令统计

    [root@localhost ~]# awk '{print $2}' ha.txt|sort|uniq -c|sort -rn
          3 m
          2 f
    

    4.2.3)使用数组进行统计

    #!/bin/bash
    declare -A array_count
    while read line
    do
            type=$(echo $line|awk '{print $2}')
            let array_count[$type]++
    done<ha.txt
    for i in ${!array_count[*]}
    do
            echo "$i 次数为:${array_count[$i]}"
    done
    
    #执行结果
    [root@localhost ~]# bash a2.sh
    f 次数为:2
    m 次数为:3
    
    4.3、统计不同账户的数量

    4.3.1)、使用命令统计

    [root@localhost ~]# awk -F ':' '{print $NF}' /etc/passwd|sort|uniq -c|sort -n
          1 /bin/sync
          1 /sbin/halt
          1 /sbin/shutdown
          6 /bin/bash
         22 /sbin/nologin
    

    4.3.2)、使用数组进行统计

    #!/bin/bash
    declare -A user_array
    while read line
    do
    	type=`echo $line|awk -F ':' '{print $NF}' `
    	let user_array[$type]++
    done</etc/passwd
    
    for i in ${!user_array[*]}
    do
    	echo " 用户类型为:$i,该类型用户个数为:${user_array[$i]}"
    done
    
    #执行结果
    [root@localhost ~]# bash a3.sh 
     用户类型为:/sbin/nologin,该类型用户个数为:22
     用户类型为:/bin/sync,该类型用户个数为:1
     用户类型为:/bin/bash,该类型用户个数为:6
     用户类型为:/sbin/shutdown,该类型用户个数为:1
     用户类型为:/sbin/halt,该类型用户个数为:1
    
  • 相关阅读:
    css 中关于border-color 继承了color的说明
    关于飞书的相关开发案例
    好看的点赞设计
    较好的设计网站参考
    较好的B端设计体验 说明
    基于vue的流程图插件
    较好看的中后台模板(ui)
    前端笔记-201807
    前端笔记(201905-201906)
    前端笔记(201902-201904)
  • 原文地址:https://www.cnblogs.com/hjnzs/p/12298407.html
Copyright © 2011-2022 走看看