码迷,mamicode.com
首页 > 编程语言 > 详细

shell编程之数组

时间:2016-07-11 01:35:14      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:数组   array   shell编程   



Array,数组

变量:存储单个元素的内存空间;
数组:存储多个元素的内存空间;

    数组名:整个数组只有一个名字;
    数组索引:编号从0开始;
        数组名[索引]
        array[index]
        
        取值:
            ${array[index]}
            如果不指定索引号index,则默认返回index为0的元素;
            
    bash-4及之后的版本,支持自定义索引格式,而不仅仅是0,1,2,...数字格式;
        此类数组称之为"关联数组";
        
声明数组:
    #help declare
    
        -a    to make NAMEs indexed arrays. 声明索引数组;
        -A    to make NAMEs associative arrays. 声明关联数组;
        
数组中元素的赋值方式:(无需事先声明)

    (1)一次只赋值一个元素;
        ARRAY_NAME[index]=value
            #animals[0]=pig
            #animals[1]=dog
            #echo $animals            #若不加索引号,则默认返回第一个元素的值;
            #echo ${animals[1]}        #返回第二个元素的值;
        
    (2)一次赋值全部元素;(连续赋值)
        ARRAY_NAME=("value1" "value2" "value3" ...)
            #weekdays=("Monday" "Tuesday" "Wednesday")
            #echo ${weekdays[2]}
            
            连接数组,将若干个数组进行拼接:
            #arrayN=(${array1[@]} ${array2[@] ...})
            
    (3)只赋值特定元素:(稀疏格式的数组,不连续赋值)
        ARRAY_NAME=([0]="value1" [3]="value4" ...)
            #sword=([0]="yitian" [3]="longquan")
            #echo ${sword[3]}
            
    (4)read -a ARRAY_NAME        
        #read -a jianghu
            Yuebuqun Dongfangbubai Qqianchaotaijian
        #echo ${jianghu[1]}
            Dongfangbubai
        
数组的长度(数组中元素的个数):
    ${#ARRAY_NAME[*]}
    ${#ARRAY_NAME[@]}
    
        #echo ${#world[*]}
        #echo ${#world[@]}
        
    如果不加索引号index,则返回第一个元素的字符长度:
        #echo ${#animals}
        3
        
    如果不加#,则返回数组中的所有元素:
        #echo ${animals[*]}
        #echo ${animals[@]}
            pig dog
            
            ${array[@]}输出的是以空白隔开的元素值;
            ${array[*]}输出的是一整个字符串;
            
    示例:生成10个随机数,找出其中的最大值;
        #vim rand.sh
        #!/bin/bash
        #
        declare -a rand
        declare -i max=0
        for i in {0..9};do
            rand[$i]=$RANDOM
            echo ${rand[$i]}
            [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
        done
        echo "MAX: $max"
    
    定义一个数组,数组中的元素是/var/log目录下的所有以.log结尾的文件;
    统计其index为偶数的文件的行数之和;
        #vim array1.sh
        #!/bin/bash
        #
        declare -a files
        files=(/var/log/*.log)
        declare -i lines=0
        for i in `seq 0 $[${#files[*]}-1]`;do
            if [ $[$i%2] -eq 0 ];then
                let lines+=`wc -l ${files[$i]} | awk ‘{print $1}‘`
            fi
        done
        echo "Lines: $lines"
        
数组元素切片:
    
    ${ARRAY_NAME[@]:offset:number}
        offset:要跳过的元素个数;偏移量;
        number:要取出的元素个数;省略number时,表示取偏移量之后的所有元素;
        
        #files=(/etc/[Pp]*)
        #echo ${files[*]}
            /etc/PackageKit /etc/pam.d /etc/passwd /etc/passwd- /etc/php.d /etc/php.ini /etc/phpMyAdmin /etc/php-tcpdf /etc/pinforc /etc/pkcs11 /etc/pki /etc/plymouth /etc/pm /etc/polkit-1 /etc/popt.d /etc/postfix /etc/ppp /etc/prelink.conf.d /etc/printcap /etc/profile /etc/profile.d /etc/protocols /etc/pulse /etc/puppet /etc/python
        #echo ${files[@]:2:3}        #跳过2个,取三个;
            /etc/passwd /etc/passwd- /etc/php.d
        #echo ${files[@]:5}            #跳过5个,取后面所有;
        
向数组中追加元素:
    ARRAY_NAME[${#ARRAY_NAME[@]}]=value
    
删除数组中的某元素:
    unset Array[index]

删除整个数组:
    unset Array
    
关联数组,需要事先声明;
    declare -A ARRAY_NAME
    ARRAY_NAME=([index_name1]="value1" [index_name2]="value2" ...)
        
        #declare -A world
        #world[us]="america"
        #echo "${world[us]}"
        #world[uk]="united kingdom"
        #echo "${world[uk]}"               

shell编程之数组

标签:数组   array   shell编程   

原文地址:http://keithtt.blog.51cto.com/3080111/1813934

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!