shell 数组

数组简介

数组:
        数组名+索引
            数组元素

        索引的表示方式:
            数字索引:a[index]
                a[0], a[1]

            bash 4.0的关联数组
                a[hello], a[hi]

            declare -a 
                    -A

        支持稀疏格式:
        仅一维数组

    数组的赋值:
        一次对一个元素赋值:
            a[0]=$RANDOM
            ...

        一次对全部元素赋值:
            a=(red blue yellow green)

        按索引进行赋值:
            a=([0]=green [3]=red [2]=blue [6]=yellow)

        命令替换:

        用户输入:
            read -a ARRAY


    数组的访问:

        用索引访问:
            ARRAY[index]

    数组的长度:
        ${#ARRAY[*]}
        ${#ARRAY[@]}

        练习:写一个脚本,生成10个随机数,保存至数组中;而后显示数组下标为偶数的元素;

        for i in {0..9}; do
            num[$i]=$RANDOM
        done

    从数组中挑选某元素:
        ${ARRAY[@]:offset:number}
            切片:
                offset: 偏移的元素个数
                number: 取出的元素的个数

        ${ARRAY[@]:offset}:取出偏移量后的所有元素

        ${ARRAY[@]}: 取出所有元素


    数组复制:
        要使用${ARRAY[@]}

        $@: 每个参数是一个独立的串
        $*: 所有参数是一个串


    向数组追加元素:

        示例:复制一个数组中下标为偶数的元素至一个新数组中
            #!/bin/bash
            declare -a mylogs
            logs=(/var/log/*.log)

            echo ${logs[@]}

            for i in `seq 0 ${#logs[@]}`; do
                if [ $[$i%2] -eq 0 ];then
                   index=${#mylogs[@]}
                   mylogs[$index]=${logs[$i]}
                fi
            done

            echo ${mylogs[@]}


    从数组中删除元素:

        unset ARRAY[index]

简单示例

生成10个随机数,升序排序

        #!/bin/bash
        for((i=0;i<10;i++))
        do
            rnd[$i]=$RANDOM
        done

        echo -e "total=${#rnd[@]}\n${rnd[@]}\nBegin to sort"

        for((i=9;i>=1;i--))
        do
            for((j=0;j<i;j++))
            do
                if [ ${rnd[$j]} -gt ${rnd[$[$j+1]]} ] ;then
                    swapValue=${rnd[$j]}
                    rnd[$j]=${rnd[$[$j+1]]}
                    rnd[$[$j+1]]=$swapValue        
                fi
            done
        done

        echo ${rnd[@]}    

打印九九乘法表

        #!/bin/bash
        for((i=1;i<=9;i++))
        do 
            strLine=""
            for((j=1;i<=9;j++))
            do
                strLine=$strLine"$i*$j="$[$i*$j]"\t"
                [ $i -eq $j ] && echo -e $strLine && break
            done
        done

 

posted @ 2019-01-26 13:48  Coolc  阅读(277)  评论(0编辑  收藏  举报