zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

Shell系列(38)- 数组操作→取值、遍历、替换、删除

2023-02-18 16:26:37 时间

引言

在Linux平台上工作,我们经常需要使用shell来编写一些有用、有意义的脚本程序。有时,会经常使用shell数组。那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解,shell中的数组。

数组的定义

何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。

数值类型的数组:

  • 一对括号表示数组,数组中元素之间使用“空格”来隔开
  • a=(1 2 3 4 5)

字符串类型数组

  • 使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。
  • a=("abc" "edf" "sss")
  • a=('abc' 'edf' 'sss')

数组的操作

  • 我们使用数值类型数组a=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。
  • 在shell里面想获取自定义变量的值,使用$符开头,但是数组得加花括号{}

获取数组长度

  • echo ${#a[*]}
  • echo ${#a[@]}
  • #格式:${#数组名[@/*]} 可得到数组的长度

读取某个下标的值

  • a=${a[2]}
  • 格式:${数组名[下标]}

读取数组所有得值

  • a=${a[*]}
  • a=${a[@]}
  • 格式:${数组名[*/@]}

对某个下标赋值

  • 如果该下标元素已经存在,会修改该下标的值为新的指定值。
  • 例子:a[2]=100,数组被修改为(1 2 100 4 5)
  • ?演示
  • a=(1 2 3 4 5)
  • a[2]=100
  • echo ${a[@]}

  • 如果指定的下标已经超过当前数组的大小,新赋的值被追加到数组的尾部。
  • 例子:a[13]=13,数组被修改为(1 2 100 4 5 13)
  • ?演示
  • a[13]=13
  • echo ${a[@]}

删除操作

  • 清除某个元素:unset a[1],这里清除下标为1的数组;
  • ?演示
  • a=(1 2 3 4 5)
  • unset a[1]
  • echo ${a[@]}

  • 清空整个数组:unset a
  • ?演示
  • unset a
  • echo ${a[@]}

分片访问

  • 格式:${数组名[@或*]:开始下标:取几个}
  • 例子:${a[@]:1:3},这里分片访问从下标为1开始,取3个元素。

元素值替换

  • 格式:${数组名[@或*]/第几个/新值}注意第几个和下标不一样的,下标是从0开始计数;这条命令是将第一个数置换为新值
  • 例子:${a[@]/2/98}

数组的遍历

数组遍历我们使用for语句来演示:

  • for i in ${a[@]}
  •   do
  •     echo $i;
  •   done