Linux基础 - shell数组

作者: 菩提老鹰 | 来源:发表于2018-01-25 20:39 被阅读49次

    摘要

    数组的特性就是一组数据类型相同的集合,虽然shell是弱类型,但是我们也可以将其数组分为数据类型的数组字符串类型的数组两类
    shell的数组元素之间用空格分隔开


    数组操作

    假设有以下两个数组

    array1=(1 2 3 4 5 6)
    array2=("James" "Colin" "Harry")
    
    • 数据变量名默认输出
      默认直接输出变量的话,其输出值默认为第一个元素的值,下标从0开始
    root@pts/1 $ echo $array1
    1
    root@pts/1 $ echo $array2
    James
    
    • 获取数组元素
      格式:${数组名[下标]},下标从0开始,下标为*@代表整个数组内容
    root@pts/1 $ echo ${array1[2]}
    3
    root@pts/1 $ echo ${array2[1]}
    Colin
    
    ## 获取全部元素
    root@pts/1 $ echo ${array2[*]}
    James Colin Harry
    root@pts/1 $ echo ${array2[@]}
    James Colin Harry
    
    • 获取数组长度
      格式:${#数组名[*或@]}
    root@pts/1 $ echo ${#array1[@]}
    6
    root@pts/1 $ echo ${#array2[*]}
    3
    
    • 数组遍历
    root@pts/1 $ for item in ${array2[@]}
    > do
    >     echo "The name is ${item}"
    > done
    The name is James
    The name is Colin
    The name is Harry
    
    • 数组元素赋值

    格式:数组名[下标]=值,如果下标不存在,则新增数组元素; 下标已有,则覆盖数组元素值

    root@pts/1 $ array1[2]=18
    root@pts/1 $ echo ${array1[*]}
    1 2 18 4 5 6
    
    root@pts/1 $ array2[4]="Betty"
    root@pts/1 $ echo ${array2[*]}
    James Colin Harry Betty
    
    • 数组切片

    格式:${数组名[*或@]:起始位:长度},截取部分数组,返回字符串,中间用空格分隔;将结果使用(),则得到新的切片数组

    root@pts/1 $ echo ${array2[*]}
    James Colin Harry Betty
    root@pts/1 $ echo ${array2[*]:1:3}
    Colin Harry Betty
    
    root@pts/1 $ array3=(${array2[*]:1:2})
    ks-devops [~] 2018-01-25 20:30:16
    root@pts/1 $ echo ${array3[@]}
    Colin Harry
    
    • 数组元素替换

    格式:${数组名[*或@]/查找字符/替换字符}, 不会修改原数组;如需修改的数组,将结果使用“()”赋给新数组

    root@pts/1 $ echo ${array2[*]}
    James Colin Harry Betty
    root@pts/1 $ echo ${array2[*]/Colin/Colin.Liu}
    James Colin.Liu Harry Betty
    
    root@pts/1 $ array4=(${array2[*]/Colin/Colin.liu})
    root@pts/1 $ echo ${array4[*]}
    James Colin.liu Harry Betty
    
    • 删除元素

    格式:
    unset 数组,清除整个数组;
    unset 数组[下标],清除单个元素

    root@pts/1 $ echo ${array2[*]}
    James Colin Harry Betty
    root@pts/1 $ echo ${array4[*]}
    James Colin.liu Harry Betty
    
    root@pts/1 $ unset array4
    root@pts/1 $ unset ${array2[3]}
    
    root@pts/1 $ echo ${array2[*]}
    James Colin Harry Betty
    
    root@pts/1 $ echo ${array4[*]}
    
    root@pts/1 $
    

    相关文章

      网友评论

        本文标题:Linux基础 - shell数组

        本文链接:https://www.haomeiwen.com/subject/tsrbaxtx.html