zoukankan      html  css  js  c++  java
  • shell编程(六)之数组

    数组: 存储多个元素的连续的内存空间

      索引: 编号从0开始,属于数值索引
        注意:索引也可支持使用自定义的格式,而不仅仅是数值格式 

    声明数组:
      declare -a ARRAY_NAME
      declare -A ARRAY_NAME: 关联数组,键值列表kv

    数组元素的赋值:
      1.一次只赋值一个元素
        ARRAY_NAME[INDEX]=VALUE
          weekdays[0]="Sunday"
          weekdays[4]="Thursday"
      2. 一次赋值全部元素
        ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
      3.只赋值特定元素
        ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
      4. read -a ARRAY

    引用数组元素:${ARRAY_NAME[INDEX]}
      注意: 省略[INDEX]表示引用下标为0的元素

    #!/bin/bash
                declare -a arr1 # 声明普通数组
                declare -A arr2 # 声明关联数组
    
                # 数组赋值
                # 一次赋值一个元素
                # arr1[0]="Tom"
                # arr1[3]="Jerry"
    
                # 一次赋值全部元素
                arr1=("Tom" "Jack" "Jerry" "slace")
    
                # 只赋值特定元素
                # arr1=([0]="Tom" [3]="Jerry" [6]="Jack")
    
                # 省略下标默认显示第0个元素
                 echo $arr1 # Tom
    
                # 数组长度
                echo ${#arr1[*]} # 4
                echo ${#arr1[@]} # 4

    示例:生成10个随机数,并找出其最大值和最小值

    #!/bin/bash
    declare -i max=0
    declare -i min=0
    declare -a arr
    
    for i in {1..10};do
      arr[$i]=$RANDOM
      echo ${arr[$i]}
      if [ ${arr[$i]} -gt $max ]; then
        let max=arr[$i]
      else
        let min=arr[i]
      fi
    done
    echo "max is $max,min is $min"

    练习: 写一个脚本: 定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件,要统计其下标为偶数的文件中的行数

    #!/bin/bash
    declare -a arr
    declare -i sumlines=0
    
    arr=(/var/log/*.log)
    
    for i in $(seq 0 1 $[${#arr[@]}-1]); do
      if [ $[$i%2] -eq 0 ]; then
        let sumlines+=`wc -l ${arr[$i]} | cut -d' ' -f1`
      fi
    done
    
    echo "下标为偶数的文件中的行数为$sumlines行"

    引用数组中的元素

      所有元素:${ARRAY[@], ${ARRAY[*]}}

      数组切片: ${ARRAY[@]:offset:number}
        offset:要跳过的元素个数
        number:要取出的元素个数,偏移量之后的所有元素: ${ARRAY[@]:offset}

    数组的长度(数组中元素的个数): ${#ARRAY_NAME[*]}, ${#ARRAY_NAME[@]}

    向数组中追加元素:
      ARRAY[${#ARRAY[*]}]

    删除数组中的某元素:
      unset ARRAY[INDEX]

    关联数组:
      declare -A ARRAY_NAME
      ARRAY_NAME=([index_name1]='val1' [index_name2]='val2' ...)

              # 引用数组中的元素
                    # 引用数组中所有元素
                    echo ${arr1[@]}
                    echo ${arr1[*]}
    
                    # 数组切片: ${arr1[@]:offset:number}
                    # 偏移两个元素取一位
                    echo ${arr1[*]:2:1}
                    # 偏移几个元素后所有元素
                    echo ${arr1[@]:1}
    
                    # 向数组追加元素
                    arr1[${#arr1[@]}]="chengkaihua"
                    arr1[${#arr1[@]}]="alen"
                    echo ${arr1[@]}
    
                    # 删除数组元素
                    unset arr1[2]
                    echo ${arr1[@]}
    
                    # 显示最后一位
                    echo ${arr1[$[${#arr1[*]}-1]]}
    
                结果显示:
                    Tom Jack Jerry slace
                    Tom Jack Jerry slace
                    Jerry
                    Jack Jerry slace
                    Tom Jack Jerry slace chengkaihua alen
                    Tom Jack slace chengkaihua alen
                    chengkaihua

    练习:生成10个随机数,升序或降序排序
    冒泡排序:

    #!/bin/bash
    declare -a arr
    declare -i tmp=0
    
    for i in {0..9};do
      arr[$i]=$RANDOM
    done
    
    for ((i=0;i<$[${#arr[*]}-1];i++));do
      for ((j=0;j<$[${#arr[*]}-1-$i];j++));do
        if [ ${arr[$j]} -gt ${arr[$[$j+1]]} ];then
          let tmp=${arr[$j]}
          arr[$j]=${arr[$[$j+1]]}
          arr[$[$j+1]]=$tmp
        fi
      done
    done
    echo ${arr[@]}
  • 相关阅读:
    redis同步指定key数据到其他redis中
    Golang 生成随机数
    怎么理解“平均负载”? 进行分析等
    Golang打印空心金字塔for循环实现
    python十几行代码实现三级菜单
    mysql增量恢复
    python内建函数
    python练习题总结
    迭代器和生成器
    python基础数据类型
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10765279.html
Copyright © 2011-2022 走看看