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

    一、数组的定义

    数组就是将相同数据类型的元素按照一定顺序排列的集合。常用的定义一个数组有两种方式:

    • array=(1 2 3)
    • array=($(ls))

    其中第一种是已知元素组成的元组,外面使用括号,里面元素之间使用空格隔开;第二种方式是元素未知,通过命令获取。

    [root@localhost ~]# array=(1 2 3)

    二、数组基本操作

    数组得而基本操作无非就是增、删、改、查,其中查用的是最多的。

    1、查

    数组的查询是用的最多的操作,包括:

    • 获取数组的所有元素
    • 获取数组的某个元素
    • 获取数组的长度

    ...

    [root@localhost ~]# array=(1 2 3)
    # 通过*、@获取数组的所有元素
    [root@localhost ~]# echo ${array[*]}
    1 2 3
    [root@localhost ~]# echo ${array[@]}
    1 2 3
    # 通过索引获取数组的单个元素
    [root@localhost ~]# echo ${array[0]}
    1
    [root@localhost ~]# echo ${array[1]}
    2
    # 获取数组的长度
    [root@localhost ~]# echo ${#array[*]}
    3
    [root@localhost ~]# echo ${#array[@]}
    3

    2、增、改

    直接通过数组下标对其进行引用赋值,如果下标存在就会对其进行修改,如果下标不存在就对数组添加新的元素。

    [root@localhost ~]# array=(1 2 3)
    # 添加新元素
    [root@localhost ~]# array[3]=4
    [root@localhost ~]# echo ${array[3]}
    4
    # 修改元素
    [root@localhost ~]# array[0]=a
    [root@localhost ~]# echo ${array[0]}
    a
    [root@localhost ~]# echo ${array[*]}
    a 2 3 4

    3、删

    通过unset array[index] 进行相应的元素清除,如果不带index清除的就是整个数组。

    [root@localhost ~]# array=(1 2 3)
    # 清除最后一个元素
    [root@localhost ~]# unset array[2]
    [root@localhost ~]# echo ${array[*]}
    1 2
    # 清除整个数组
    [root@localhost ~]# unset array
    [root@localhost ~]# echo ${array[*]}

    三、进阶操作

    数组也是变量,因此也适用于变量子串的操作:

    • 截取
    • 替换
    • 删除

    1、截取

    # 截取下标1-3元素
    [root@localhost ~]# echo ${array[@]:1:3}
    2 3 4
    
    # 截取下标1之后的所有元素
    [root@localhost ~]# echo ${array[@]:1}
    2 3 4 5

    2、替换

    # 把数组中的元素1替换为a,注意的是原数组并没有更改
    [root@localhost ~]# echo ${array[@]/1/a}
    a 2 3 4 5
    [root@localhost ~]# echo ${array[@]}
    1 2 3 4 5

    3、删除

    [root@localhost ~]# array=(welcome to here)
    # 从开始最短匹配删除
    [root@localhost ~]# echo ${array[@]#t}
    welcome o here
    # 从结尾最短匹配删除
    [root@localhost ~]# echo ${array[@]%e}
    welcom to her

    四、实战

    • 循环打印数组元素
    #!/bin/sh
    array=(1 2 3 4 5)
    for((i=0;i<${#array[@]};i++))
    do
      printf "${array[$i]}
    "
    done
    • 循环打印文件夹下的文件
    #!/bin/sh
    dir_path=/project/scripts/testDir
    array=($(ls $dir_path))
    for file in ${array[*]}
    do
      echo $file
    done
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    NetBeans 时事通讯(刊号 # 147 May 18, 2011)
    NetBeans 时事通讯(刊号 # 146 May 13, 2011)
    准备入职支付宝
    NetBeans 时事通讯(刊号 # 145 May 05, 2011)
    GAE 博客——B3log Solo 0.2.6 正式版发布了!
    用C语言实现一个简单的HTTP客户端(HTTP Client)
    Grack Ruby/Rack Git SmartHTTP Server Handler
    Cpy
    pyhttp 用Python演示Web服务器/客户端对HTTP协议的解析
    用C语法来写Python代码
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14385506.html
Copyright © 2011-2022 走看看