设为首页 收藏本站
查看: 654|回复: 0

shell编程之数组

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-11 09:09:01 | 显示全部楼层 |阅读模式
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]}"        


  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-242344-1-1.html 上篇帖子: shell编程之函数 下篇帖子: shell编程之awk
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表