当前位置: 首页 > news >正文

shell脚本之数组

 内容预知

 1.数组的基本概念和相关知识

2. Linux中数组的构造

2.1 数组默认规则

2.2 字符串和字符列表的定义 

2.3数组定义构造的方法 

2.3.1 定义方式1 

2.3.2 定义方式2 

2.3.3 定义方式3

2.3.4 定义方式4(该方法还可以用于单个元素的修改)

3. 数组的输出,删除和长度统计

3.1 数组元素的输出 

3.1.1 单元素的输出 

3.1.2 数组全部元素输出 

3.1.3 任意字符起输出任意个数数组元素 (数组切片)

 3.1.4 条件判断输出方式

3.2 数组的删除 (Linux命令环境中)

 3.2.1 删除单个数组元素

3.2.2 删除整个数组

3.3 数组长度统计及其其他作用 

3.3.1 统计数组长度的方法

3.3.2 用元素个数的方法来检测数组中是否存在空值 

4.数组的遍历和替换 

 4.1 数组的遍历

4.2 数组中元素的替换 

 

4.2.1 数组的临时替换 

4.2.2 永久替换数组内容

 5.数组追加元素

 5.1 方式一:指定位置添加

5.2 方式二: 末尾追加元素

5.3  方式三:进行末尾多元素追加

方法四:直接末尾追加多元素且格式最为简单 

6.数组在函数的传参

 总结


 

 1.数组的基本概念和相关知识

 

 数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在编程中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。  这些有序排列的同类数据元素的集合称为数组。

2. Linux中数组的构造

2.1 数组默认规则

  • 数组中的每个元素分分隔符一定为空格隔开
  • 每个元素都拥有与其对应的下标,第一个对应的下标值为0 

 

2.2 字符串和字符列表的定义 

 在数组之前我们定义一串字符的变量,用到的是字符串和字符串列表

 

字符串的定义格式: 变量名= 字符数据 

 

字符串列表的定义格式:  变量名="字符   分隔符  字符............." 

 

2.3数组定义构造的方法 

 

常用的数组定义方法一共拥有4种,各有不同的特点与运用场景

 

2.3.1 定义方式1 

数组名=(value0  value1 value2  ..........valuen) 

[root@localhost shuzhu]# array1=(10 20 30 40 50)
[root@localhost shuzhu]# echo ${array1[@]}
10 20 30 40 50
[root@localhost shuzhu]# echo ${array1}
10

2.3.2 定义方式2 

 

数组名=( [0]=value1 [1]=value2  [2]=value3.........[N-1]=valueN  ) 

[root@localhost shuzhu]# array2=([0]=11 [1]=22 [3]=33 [4]=44)
[root@localhost shuzhu]# echo ${array2[*]}
11 22 33 44

 

2.3.3 定义方式3

 

1.定义一个字符串列表 :列表名="value1 value2 value3...........valueN"

2.用数组获取字符串列表中的内容: 数组名=($列表名) 

 

[root@localhost shuzhu]# i="a b c d e f g"
[root@localhost shuzhu]# array3=($i)
[root@localhost shuzhu]# echo ${array3[*]}
a b c d e f g

2.3.4 定义方式4(该方法还可以用于单个元素的修改)

 数组名[0]=value1

 数组名[1]=value2

 数组名[2]=value3

 数组名[3]=value4

............................

 数组名[N-1]=valueN

 

[root@localhost shuzhu]# array4[0]=one
[root@localhost shuzhu]# array4[1]=two
[root@localhost shuzhu]# array4[2]=three
[root@localhost shuzhu]# array4[3]=four
[root@localhost shuzhu]# array4[4]=five
[root@localhost shuzhu]# echo ${array4[*]}
one two three four five

 

3. 数组的输出,删除和长度统计

3.1 数组元素的输出 

 

3.1.1 单元素的输出 

格式:echo ${数组名[下标]} 

[root@localhost shuzhu]# echo ${array1[0]}
10
[root@localhost shuzhu]# echo ${array1[3]}
40
[root@localhost shuzhu]# echo ${array1[2]}
30

 

3.1.2 数组全部元素输出 

 

 方式一:echo ${数组名[*]}

方式二:echo  ${数组名[@]}

[root@localhost shuzhu]# echo ${array1[*]}
10 20 30 40 50
[root@localhost shuzhu]# echo ${array1[@]}
10 20 30 40 50

 

3.1.3 任意字符起输出任意个数数组元素 (数组切片)

 方式一:echo ${数组名[*]:下标:个数}

 方式一:echo ${数组名[@]:下标:个数}

[root@localhost shuzhu]# echo ${array1[@]:2:3}
30 40 50

 

 3.1.4 条件判断输出方式

 该输出方式,当数组存在元素,则输出数组的,如果不存在,则输出我们指定的内容

格式:echo ${数组名:-'选择输出的内容'}

 

 

 

3.2 数组的删除 (Linux命令环境中)

 3.2.1 删除单个数组元素

格式: unset   数组名[N]      其中N为存在元素的数组下标(不存在也能操作,但是没有意义) 

[root@localhost shuzhu]# echo ${array2[*]}
11 12 13 14 15 16 17 18 19 20
[root@localhost shuzhu]# unset array2[3]
[root@localhost shuzhu]# echo ${array2[*]}
11 12 13 15 16 17 18 19 20

 

3.2.2 删除整个数组

 格式:  unset  数组名[*]    或则  unset  数组名[@] 

 

[root@localhost shuzhu]# echo ${array2[*]}
11 12 13 15 16 17 18 19 20
[root@localhost shuzhu]# unset array2[*]
[root@localhost shuzhu]# echo ${array2[*]}

[root@localhost shuzhu]# 

 

 

3.3 数组长度统计及其其他作用 

3.3.1 统计数组长度的方法

格式:echo ${#数组名[*]}或则 echo ${#数组名[@]}

 

[root@localhost shuzhu]# echo ${#array2[*]}
10
[root@localhost shuzhu]# echo ${#array2[@]}
10
[root@localhost shuzhu]# 

3.3.2 用元素个数的方法来检测数组中是否存在空值 

 数组空值产生的原因:

我们用方法四定义数组元素值时,可以随意指定下标位置,但与此同时中间的有些数组下标中的元素就成了空值 。

操作过程: 

1.定义一个变量获取数组的长度:新变量= ${#数组名[*]}

2.输出依据数组长度的最后一个元素:echo  ${数组名[lenth-1]]

3.与数据列表最后一个值进行比较

 

[root@localhost shuzhu]# arr1[0]=111
[root@localhost shuzhu]# arr1[2]=112
[root@localhost shuzhu]# arr1[3]=113
[root@localhost shuzhu]# arr1[4]=114
[root@localhost shuzhu]# lenth=${#arr1[*]}
[root@localhost shuzhu]# echo ${arr1[lenth-1]}
113
[root@localhost shuzhu]# echo ${arr1[*]}
111 112 113 114

 

 

4.数组的遍历和替换 

 4.1 数组的遍历

 

我们可以用数组存储多个元素作为循环条件来使用,当数组配上循环,就可以形成一个指定范围和数据的遍历

数组遍历演示: 

[root@localhost shuzhu]# arry=(1 2 3 4 5 6 7 8 9 10)
[root@localhost shuzhu]# for i in ${arry[*]}
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10

 

4.2 数组中元素的替换 

 

4.2.1 数组的临时替换 

格式: echo ${数组名[*]/被替换的字符或字段/新的字符或字段} 

[root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
[root@localhost shuzhu]# echo ${arry[*]/00/22}
122 222 322 422 522 622 722
[root@localhost shuzhu]# echo ${arry[*]/2/3}
100 300 300 400 500 600 700
[root@localhost shuzhu]# echo ${arry[*]/300/200}
100 200 200 400 500 600 700
[root@localhost shuzhu]# echo ${arry[*]}
100 200 300 400 500 600 700
[root@localhost shuzhu]# 

4.2.2 永久替换数组内容

原理描述: 用一个新的数组去接收临时替换的数组的元素(达到永久替换的效果)

 运用演示:

[root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
[root@localhost shuzhu]# echo ${arry[*]}
100 200 300 400 500 600 700
[root@localhost shuzhu]# arry1=${arry[*]/300/200}
[root@localhost shuzhu]# echo ${arry1[*]}
100 200 200 400 500 600 700

 

 

 5.数组追加元素

 

 5.1 方式一:指定位置添加

 与定义数组方法4一样,直接赋予新值覆盖原来的元素

数组名[N]=新value

 

5.2 方式二: 末尾追加元素

 

格式: 数组名[${#数组名[*]}] =新元素   或     数组名[${#数组名[@]}] =新元素


[root@localhost shuzhu]# echo ${arry[*]}
100 200 300 400 500 600 700
[root@localhost shuzhu]# arry[${#arry[*]}]=800
[root@localhost shuzhu]# echo ${arry[*]}
100 200 300 400 500 600 700 800

 

 

5.3  方式三:进行末尾多元素追加

格式:数组名=("${数组名[@]}"  value1   value2 ......valueN)  

运用演示:

[root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
[root@localhost shuzhu]# echo ${arry[@]}
100 200 300 400 500 600 700
[root@localhost shuzhu]# arry=("${arry[@]}" 800 900 1000)
[root@localhost shuzhu]# echo ${arry[@]}
100 200 300 400 500 600 700 800 900 1000


 

 

方法四:直接末尾追加多元素且格式最为简单 

 

格式:  数组名+=(value1 value2 ........valueN)

 


[root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
[root@localhost shuzhu]# echo ${arry[@]}
100 200 300 400 500 600 700
[root@localhost shuzhu]# arry+=(800 900 1000)
[root@localhost shuzhu]# echo ${arry[@]}
100 200 300 400 500 600 700 800 900 1000

 

 

 

6.数组在函数的传参

 需求:定义一个遍历数组的函数,并且让数组里的元素翻倍输出

 

#!/bin/bash
a=0
double (){
local array=$@
for i  in  ${array[@]}
do
 let i*=2
array[$a]=$i
let a++
done
echo ${array[@]}
}


##########main#########
array=(10 20 30 40 50)
RESULT=$(double ${array[@]})
echo "翻倍后的数组为" $RESULT

 

结果测试 :

 总结

 1.数组的构造方法(我们可以看作是一个集合变量,包含许多独立的元素)

2.学会数组替换,并且用新数组接收,就可以形成永久替换的效果

3.追加数组的第三种方法要注意" "还有表示数组全部用@不用*

4.函数获取数组,函数的位置变量使用$@或则@*才可获取完整的数组参数

相关文章:

  • 智能人体存在感知方案,毫米波雷达感应器成品,智能化感知联动应用
  • 主流跨域方式解析!
  • MMDetection3D简单教程:模型定义、注册与搭建
  • 国内代码托管中心-码云(九)——Git
  • 2022年9月1日:Visual Studio Code 中的 GitHub 简介(未做完)
  • Maven进阶-配置私服(Nexus 的使用)
  • [创业-44]:《从员工到老板,你必须经历的三次跃迁》解读
  • 数据结构之线性表的顺序表(c语言)
  • 【React 一】 入门学习
  • 【JS】把Promise手写明白!
  • 媒体文件格式分析之FMP4
  • Docker--->文件文件夹的挂载映射
  • 红蓝对抗-攻防演练中红队如何识别蜜罐保护自己
  • Docker---(9)Docker中容器无法停止无法删除
  • vbs脚本---巧妙简单的坑人代码,“巩固”你和好哥们的友谊【坏笑】
  • 收藏网友的 源程序下载网
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2017-09-12 前端日报
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • angular2开源库收集
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • go语言学习初探(一)
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • leetcode98. Validate Binary Search Tree
  • Linux CTF 逆向入门
  • vue 个人积累(使用工具,组件)
  • WePY 在小程序性能调优上做出的探究
  • 使用 Docker 部署 Spring Boot项目
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 详解NodeJs流之一
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • kubernetes资源对象--ingress
  • ​flutter 代码混淆
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #单片机(TB6600驱动42步进电机)
  • $.ajax,axios,fetch三种ajax请求的区别
  • (14)Hive调优——合并小文件
  • (2)nginx 安装、启停
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣)循环队列的实现与详解(C语言)
  • . NET自动找可写目录
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net中wcf服务生成及调用
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @hook扩展分析
  • @PreAuthorize注解
  • @vue/cli脚手架
  • [ 转载 ] SharePoint 资料
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)