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!!!
  • 相关阅读:
    angularjs学习笔记一之显示数据,修改数据
    收藏/不再提醒
    CSS3动画
    Content-Type
    键盘快捷键
    url、href、src 详解
    关于docnment.write() 会清空原来的内容
    jq事件注意点
    echart的自适应
    键盘事件
  • 原文地址:https://www.cnblogs.com/yaokaka/p/13822553.html
Copyright © 2011-2022 走看看