Linux shell 数组使用

    Ubuntu12.04 TLS 64bit, bash 4.2.25

一、定义

数组是一些数据的集合,分为两个类型

(1)普通数组,只能使用整数作为索引

(2)关联数组可以使用字符串作为索引,bash 4.0开始支持,旧版版不支持

二、数组的一些操作

    (1)数组的定义以及赋值

<普通数组>

【1】定义

数组名 = ()

【2】赋值

1. 数组名 = (elem1 elem2 elem3 ......)

每个元素由空格隔开

2. 数组名[0] = "test1"

数组名[1] = "test2"

......

<关联数组>

【1】定义

declare -A 数组名

【2】赋值

1. 数组名 = ([index1] = val1 [index2] = val2 .....)

2. 数组名[index1] = val1

数组名[index2] = val2

......


    (2)求数组的长度

        ${#数组名[*]} 或 {#数组名[@]}

    (3)获得数组制定索引的元素

        ${数组名[索引值]}

    (4)获得数组的所有元素

        ${数组名[*]} 或 ${数组名[@]}

  (5)数组元素的替换

        ${数组名[*]/查找字符/替换字符} 或 ${数组名[@]/查找字符/替换字符}

替换并没有改变原来的数组,要修改原来的数组,需要对数组重新赋值

    (6)删除数组元素

         unset 数组名  #删除整个数组
         unset 数组名[索引值]  #删除指定的元素

    (7)数组的切片

        ${数组名[*]:起始位置:长度}  或  ${数组名[@]:起始位置:长度}

切片后返回的是由空格隔开的字符串,加上()后将得到切片后的子数组

    三、例子

    #!/bin/bash    
    
    
    #定义普通数组并进行赋值
    comm_arr=(1 2 3 4 5)
    
    comm_arr2=()
    comm_arr2[0]=6
    comm_arr2[1]=7
    comm_arr2[2]=8
    
    #获得普通数组的长度
    echo "comm_arr1 len is ${#comm_arr[*]}"
    echo "comm_arr2 len is ${#comm_arr2[@]}"
    
    #获得普通数组的所有元素
    echo "comm_arr1 all elem is : ${comm_arr[*]}"
    echo "comm_arr2 all elem is :${comm_arr2[@]}"
    
    #通过索引获得元素
    echo "comm_arr[4] = ${comm_arr[4]}"
    echo "comm_arr[2] = ${comm_arr2[2]}"
    echo "comm_arr[100] = ${comm_arr[100]}" #索引值不存在,但不出错,结果为空
    
    #普通数组中元素的替换
    echo "3 in comm_arr is replace 200 : ${comm_arr[*]/3/200}"
    echo "comm_arr is ${comm_arr[*]}" #原数组没有被修改
    comm_arr2=(${comm_arr2[@]/7/9})  #替换原数组
    echo "7 in comm_arr2 is replace 9 and modify comm_arr2"
    echo "comm_arr2 is ${comm_arr2[*]}"
    
    #普通数组的切片
    echo "splite comm_arr 1-3 is : ${comm_arr[*]:1:3}"
    comm_arr_split=(${comm_arr[@]:2:3}) #获得从第三个位置子开始3个元素的子数组
    echo "sub arr : len = ${#comm_arr_split[*]} , elems is : ${comm_arr_split[@]}"
    
    #普通数组的删除
    echo "del before, comm_arr is ${comm_arr[*]}"
    echo "del a elem"
    unset comm_arr[0] #删除某个元素
    echo "del after, comm_arr is ${comm_arr[*]}"
    
    echo "del all arr"
    unset comm_arr #删除整个数组
    echo "del after, comm_arr is ${comm_arr[*]}" #为空
    
    
    #定义关联数组并赋值
    declare -A link_arr
    link_arr[‘apple‘]=‘10$‘
    link_arr[orange]=‘100Y‘
    
    declare -A link_arr2
    link_arr2=([age]=20 [name]=zhangsan [sex]=m)
    
    #获得关联数组的长度
    echo "link arr len: ${#link_arr[*]}"
    echo "link arr2 len: ${#link_arr2[@]}"
    
    #通过索引获得元素
    echo "link arr index=apple, elem is ${link_arr[‘apple‘]}"
    echo "link arr2 index=name, elem is ${link_arr2[name]}"
    echo "link arr index=name not exist, but no error, ${link_arr[name]}" #虽然没有这个索引,但不会错误,只是结果为空
    
    #输出关联数组中所有元素
    echo "apple is ${link_arr[*]}"
    echo "link_arr2 is ${link_arr2[@]}"
    
    #关联数组中的替换
    echo "link arr2 zhangsan is replace lisi, ${link_arr2[*]/zhangsan/lisi}" #原数组没有修改
    echo "link arr2 is ${link_arr2[*]}"
    #link_arr2=(${link_arr2[*]/zhangsan/lisi}) #报错,关联数组必须使用下标
    #echo "link arr2 is ${link_arr2[*]}"
    #echo "link arr2 name=${link_arr2[name]}"
    
    #关联数组的切片
    echo "link arr2 age-name: ${link_arr2[*]:name:2}"
    
    #关联数组的删除
    echo "del before link arr2 is ${link_arr2[*]}"
    unset link_arr2[age]
    echo ""del after link arr2 is ${link_arr2[*]}
    
    unset link_arr
    echo "del all arr ${link_arr[*]}"

结果:

comm_arr1 len is 5
            comm_arr2 len is 3
            comm_arr1 all elem is : 1 2 3 4 5
            comm_arr2 all elem is :6 7 8
            comm_arr[4] = 5
            comm_arr[2] = 8
            comm_arr[100] =
            3 in comm_arr is replace 200 : 1 2 200 4 5
            comm_arr is 1 2 3 4 5
            7 in comm_arr2 is replace 9 and modify comm_arr2
            comm_arr2 is 6 9 8
            splite comm_arr 1-3 is : 2 3 4
            sub arr : len = 3 , elems is : 3 4 5
            del before, comm_arr is 1 2 3 4 5
            del a elem
            del after, comm_arr is 2 3 4 5
            del all arr
            del after, comm_arr is
            link arr len: 2
            link arr2 len: 3
            link arr index=apple, elem is 10$
            link arr2 index=name, elem is zhangsan
            link arr index=name not exist, but no error,
            apple is 100Y 10$
            link_arr2 is zhangsan 20 m
            link arr2 zhangsan is replace lisi, lisi 20 m
            link arr2 is zhangsan 20 m
            link arr2 age-name: zhangsan 20
            del before link arr2 is zhangsan 20 m
            del after link arr2 is zhangsan m
            del all arr

时间: 2024-10-10 08:30:29

Linux shell 数组使用的相关文章

linux shell 数组建立及使用技巧

转自linux shell 数组建立及使用技巧 linux shell在编程方面比windows 批处理强大太多,无论是在循环.运算.已经数据类型方面都是不能比较的. 下面是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [[email protected] ~]$ a=(1 2 3 4 5)[[email protected] ~]$ echo $a1 一对括号表示是数组,数组元素用“空格”符号分割开. 2.数组读取与赋值 得到长度: [[email protected] ~

Linux Shell数组常用操作详解

Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) 1 declare -a array 2 array=(1 2 3 4 5) 数组用小括号括起,数组元素之间用空格分开 2显示数组长度: [@tc_132_227 dm_pid_day]$ echo ${#array[@]} 5 [@tc_132_227 dm_pid_day]$ echo ${#array[*]} 5 命令: ${#数组名[@或*]} 获取数组长度,若数组无

linux shell数组

from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 数组赋值:(1) array=(var1 var2 var3 ... varN)(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)(3) array[0]=var1    arrya[

Linux Shell系列教程之(六)Shell数组

本文是Linux Shell系列教程的第(六)篇,更多shell教程请看:Linux Shell系列教程 Shell在编程方面非常强大,其数组功能也非常的完善,今天就为大家介绍下Shell数组的用法. Shell支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0. 一.Shell数组的定义 在Shell中,用括号来表示数组,数组元素之间用“空格”分割开. 定义数组的一般形式

Linux Shell 创建序列数组

关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 .这里我主要说的是高效生成list 字符串,还有数组方法. 一.seq方法生成: 1 2 3 [[email protected] shell]$ aNumList=$(seq 100); [[email protected] shell]$ echo $aNumList 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2

Linux shell之数组

Linux shell之数组 引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解,shell中的数组. 数组的定义 何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念).那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型:虽然shell本身是

记linux shell的两个小技巧:shell数组和字符串判断

最近在使用shell写脚本的时候,想实现python中两个很简单的功能:1:判断一个字符串是否包含另一个字符串.2:怎么用实现python的列表功:1.这里跟大家分享一下. 1:判断一个字符串是否包含另一个字符串: string="abcdefg" if [[ "$string" =~ "abc" ]];then   echo "do something.." else   echo "nothing.."

linux shell基础语法

1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 1.1作为可执行程序 将上面的代码保存为t

一组Linux Shell Scripting小练习

# Linux shell将字符串分割成数组 result=$(facter | awk '/ipaddress/ && !/ipaddress_lo/ {print $1 " " $3}') array=($result) # 判断一个变量是否存在(不是判断是否为空) if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; f