zoukankan      html  css  js  c++  java
  • 十五、Shell之数组

    一、什么是数组

    简单地说,Shell的数组就是一个元素集合,它把有限个元素(变量或字符内容)用一个名字来命名,然后用编号对它们进行区分。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。

    二、数组的定义

     
    方法1:小括号定义
    [root@node1 ~]# array=(a1 a2 a3)
    [root@node1 ~]# echo ${array[*]}
    a1 a2 a3
    [root@node1 ~]# echo ${array[@]}
    a1 a2 a3
    
    方法2:用小括号将变量值括起来,同时采用键值对的形式赋值。
    [root@node1 ~]# array=([1]=one [2]=two [3]=three)
    [root@node1 ~]# echo ${array[*]}
    one two three
    
    方法3:通过分别定义数组变量的方法来定义。
    [root@node1 ~]# array[0]=a
    [root@node1 ~]# array[1]=b
    [root@node1 ~]# array[2]=c
    [root@node1 ~]# echo ${array[*]}
    a b c
    
    方法4:动态地定义数组变量,并使用命令的输出结果作为数组的内容。
    [root@node1 ~]# ls /tmp
    501.html  502.html  503.html  king1.bin  king2.bin  king3.bin  king4.bin  king5.bin  king6.bin
    [root@node1 ~]# array=($(ls /tmp))
    [root@node1 ~]# echo ${array[*]}
    501.html 502.html 503.html king1.bin king2.bin king3.bin king4.bin king5.bin king6.bin

    三、数组的输出打印

    1.打印数组元素

     
    [root@node1 ~]# array=(a1 a2 a3)
    [root@node1 ~]# echo ${array[0]}
    a1
    [root@node1 ~]# echo ${array[1]}
    a2
    [root@node1 ~]# echo ${array[2]}
    a3
    [root@node1 ~]# echo ${array[*]}   #使用@和*都可以得到全部的数组内容
    a1 a2 a3

    2.打印数组元素的个数

    [root@node1 ~]# array=(a1 a2 a3)
    [root@node1 ~]# echo ${array[*]}
    a1 a2 a3
    [root@node1 ~]# echo ${#array[*]}
    3

    3、数组赋值

     
    方法1:小括号定义
    [root@node1 ~]# array=(a1 a2 a3)
    [root@node1 ~]# echo ${array[*]}
    a1 a2 a3
    [root@node1 ~]# echo ${array[@]}
    a1 a2 a3
    
    方法2:用小括号将变量值括起来,同时采用键值对的形式赋值。
    [root@node1 ~]# array=([1]=one [2]=two [3]=three)
    [root@node1 ~]# echo ${array[*]}
    one two three
    
    方法3:通过分别定义数组变量的方法来定义。
    [root@node1 ~]# array[0]=a
    [root@node1 ~]# array[1]=b
    [root@node1 ~]# array[2]=c
    [root@node1 ~]# echo ${array[*]}
    a b c
    
    方法4:动态地定义数组变量,并使用命令的输出结果作为数组的内容。
    [root@node1 ~]# ls /tmp
    501.html  502.html  503.html  king1.bin  king2.bin  king3.bin  king4.bin  king5.bin  king6.bin
    [root@node1 ~]# array=($(ls /tmp))
    [root@node1 ~]# echo ${array[*]}
    501.html 502.html 503.html king1.bin king2.bin king3.bin king4.bin king5.bin king6.bin

    4、数组的删除

    数组本质上还是变量,因此可通过“unset数组[下标]”清除相应的数组元素,如果不带下标,则表示清除整个数组的所有数据。

    [root@node1 ~]# array=(one two three four)
    [root@node1 ~]# echo ${array[*]}
    one two three four
    
    1、取消下标为1的数组元素
    [root@node1 ~]# echo ${array[1]}
    two
    [root@node1 ~]# unset array[1]
    [root@node1 ~]# echo ${array[1]}
    
    [root@node1 ~]# echo ${array[*]}
    one three four
    [root@node1 ~]# 
    
    2、取消整个数组
    [root@node1 ~]# unset array
    [root@node1 ~]# echo ${array[*]}
    
    [root@node1 ~]# 
    
    3、从左边开始匹配最短的数组元素, 并删除。                                                  
    [root@node1 ~]# array=(one two three four five)
    [root@node1 ~]# echo ${array[*]}
    one two three four five
    [root@node1 ~]# echo ${array[*]#o*}
    ne two three four five
    
    4、左边开始匹配最长的数组元素,并删除。
    [root@node1 ~]# array=(one two three four five)
    [root@node1 ~]# echo ${array[*]##o*}
    two three four five
    
    5、右边开始匹配最短的数组元素,并删除。
    [root@node1 ~]# array=(one two three four five)
    [root@node1 ~]# echo ${array[*]}
    one two three four five
    [root@node1 ~]# echo ${array[*]%f*}
    one two three
    
    6、右边开始匹配最长的数组元素,并删除。
    [root@node1 ~]# array=(one two three four five)
    [root@node1 ~]# echo ${array[*]}
    one two three four five
    [root@node1 ~]# echo ${array[*]%%f*}
    one two three
    
                                                          

    5、数组内容的截取和替换

    内容截取

    [root@node1 ~]# array=($(echo {a..z}))
    [root@node1 ~]# echo ${array[*]}
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    
    取下标1号到5号的数组元素
    [root@node1 ~]# echo ${array[*]:1:5}
    b c d e f

    内容替换

    [root@node1 ~]# array=(1 1 2 3 3)
    [root@node1 ~]# echo ${array[*]}
    1 1 2 3 3
    
    把1替换成a
    [root@node1 ~]# echo ${array[*]/1/a}
    a a 2 3 3
    [root@node1 ~]# echo ${array[*]}
    1 1 2 3 3
    #临时修改,原数组未被修改
    
    #调用方法为${数组名[@或*]/查找字符/替换字符},该操作不会改变原先数组的内容,如果需要修改,可以重新定义数组。

    四、实验案例

    打印数组

     
    #! /bin/bash
    array=(a1 a2 a3)
    for i in $(echo ${array[*]})
    do
      echo $i
    done

    测试

    [root@node1 scripts]# bash shuzu1.sh 
    a1
    a2
    a3
    I have a dream so I study hard!!!
  • 相关阅读:
    DDD 领域驱动设计-谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
    UVA10071 Back to High School Physics
    UVA10071 Back to High School Physics
    UVA10055 Hashmat the Brave Warrior
    UVA10055 Hashmat the Brave Warrior
    UVA458 The Decoder
    UVA458 The Decoder
    HDU2054 A == B ?
    HDU2054 A == B ?
    POJ3414 Pots
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13822553.html
Copyright © 2011-2022 走看看