shell脚本中数组的运用

news2024/12/28 6:50:18

shell脚本中数组的运用

  • 一、数组的介绍
    • 1、概念
    • 2、定义方法
    • 3、数组包括的数据类型
  • 二、关于数组的操作
    • 1、获取数组长度
    • 2、获取数组各个元素的下标
    • 3、获取数组列表或单个元素
    • 4、对数组切片输出
    • 5、对数组里的元素替换
    • 6、删除单个元素或数组
    • 7、数组追加元素
    • 8、向函数传入数组的值
  • 三、数组排序算法之冒泡排序
    • 1、基本思想
    • 2、算法思路
    • 3、实现

一、数组的介绍

1、概念

数组:数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用。

2、定义方法

方法一):

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

方法二):

数组名=([0]=value [1]=value [2]=value ...)

方法三):

列表名=“value0 value1 value2 ....”
数组名=($列表名)

方法四):

数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”

3、数组包括的数据类型

  • 数值类型
  • 字符类型

字符类型要是应用双引号或单引号定于

二、关于数组的操作

1、获取数组长度

a=(1 2 3 4 5)
b=${#a[*]}
或
b=${#a[@]}

在这里插入图片描述

2、获取数组各个元素的下标

echo ${!a[@]}
或
echo ${!a[*]}

在这里插入图片描述

3、获取数组列表或单个元素

#获取数组列表
echo ${a[*]}
或
echo ${a[@]}

在这里插入图片描述

#获取单个元素
echo

在这里插入图片描述

4、对数组切片输出

 #将i数组的33 44 55输出
 i=(11 22 33 44 55)
 echo ${i[@]:1:3} 

在这里插入图片描述

5、对数组里的元素替换

a=(10 20 30 40 100)
echo ${a[@]/10/60}      //此方法替换只是输出时替换,但原数组并没有被替换

在这里插入图片描述

#永久替换相当于重新定义数组
b=(1 2 3 4 5)
b=(${b[@]/2/6})
echo ${b[@]}

在这里插入图片描述

6、删除单个元素或数组

#删除单个元素
c=(1 2 3 4 5 6)
echo ${!c[@]}
unset c[5]
echo ${c[@]}

#删除数组
unset c
echo ${c[@]}

在这里插入图片描述
注意:如果下标为0 1 2 3 4,把3删除了,下标就变成了0 1 2 4,不是0 1 2 3。

7、数组追加元素

方法一)
array_name[index]=value
方法二)
array_name[${#array_name[@]}]=value
方法三)
array_name=("${array_name[@]}" value1 ... valueN)
#双引号不能省略,否则,当数组array_name中存在包含空格的元素时会按空格将元素拆分成多个。不能将"@"替换成“*”,不加双引号时与“@”表现一致,加双引号时,会将数组array_name中所有的元素作为一个元素添加到数组中
方法四)
array_name+=(value1 value2 ... valueN)
待添加元素必须用“()”包围起来,并且多个元素用空格分隔

方法一
在这里插入图片描述
方法二
在这里插入图片描述
方法三
在这里插入图片描述
方法四
在这里插入图片描述

8、向函数传入数组的值

在这里插入图片描述
在这里插入图片描述

三、数组排序算法之冒泡排序

冒泡排序:类似于气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

1、基本思想

冒泡排序的基本思想时对比相邻的两个元素值,如果满足条件iu交换元素,把较小的元素移动到数组前面,把大的元素移动到数组的后满(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

2、算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小以确定是否交换位置,对比和交换次数随排序轮数而减少。
在这里插入图片描述

3、实现

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于遗传算法优化的核极限学习机(KELM)分类算法-附代码

基于遗传算法优化的核极限学习机(KELM)分类算法 文章目录 基于遗传算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于遗传算法优化的KELM4.测试结果5.Matlab代码 摘要:本文利用遗传算法对核极限学习机(KELM)进行优化,并用于分类 1.KE…

orin Ubuntu 20.04 配置 Realsense-ROS

librealsense安装 sudo apt-get install libudev-dev pkg-config libgtk-3-dev sudo apt-get install libusb-1.0-0-dev pkg-config sudo apt-get install libglfw3-dev sudo apt-get install libssl-dev sudo apt-get install ros-noetic-ddynamic-reconfiguresudo apt-key a…

iphone死机屏幕没反应?可以用这2种办法解决!

iPhone用的时间长了,难免不会遇到卡屏、死机的情况,如果出现这种状况我们应该怎么办呢,下面小编整理出来了几招解决方法,教大家解决iPhone卡屏、死机的问题。 一、强制重启 如果自己的iPhone一直处于卡屏无法操作,或死…

2023年电梯行业研究报告

第一章 行业概况 电梯行业是指制造、销售、安装、维护和升级电梯及相关设备的产业。电梯行业是一个不断发展的行业,主要因为人们对更高层建筑的需求越来越大,以及城市化进程的加速,从而需要更多的垂直交通设施。电梯行业在世界各地都有很好的…

64.网页设计规则#8_用户体验设计(UX)

什么是用户体验(UX)? “Design is not just what it looks like and feels like. Design is how it works” ——Steve Jobs “设计不仅仅是外观和体验。设计更重要的是其工作原理。”——史蒂夫乔布斯 UI 和 UX设计 ● UI 是图形界面:UI 设计使界面更加美观。 …

MySQL 5.7.31 安装教程

前言 MySQL 5.7.31 是5.x系列最后一版 支持全平台(包含 MacOS)的版本 下载 1.首先下载安装支持包 vc_redist.x64.exe 安装完重启使包生效 2.选择你需要的 MySQL 版本下载,我们用 5.7.31 的 这是 MySQl 的压缩包,解压就能用&a…

flutter 滑动优化

1: 如果ListView是用的children[]方式,快速滑动会卡顿建议使用SingleChildScrollView 2: 列表中有视频卡片 停止滑动时,若列表中有视频播放,由于画面一直在变化,检测工具无法判断是滑动停止;同…

看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题202快乐数) 2023.5.9

目录 前言算法题(LeetCode刷题202快乐数)—(保姆级别讲解)分析题目算法思想(使用unordered_set实现哈希表) 结束语 前言 本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可&#xff0c…

GPIO实验【嵌入式系统】

GPIO实验【嵌入式系统】 前言推荐样例工程运行安装驱动安装驱动的问题工程配置工程运行 GPIO基础实验最后 前言 2023-5-9 14:41:36 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 周立功TinyM0开发板,通过CK100仿真器下载程序。win10系统! …

本地部署 langchain-ChatGLM

本地部署 langchain-ChatGLM 1. 什么是 langchain-ChatGLM2. 什么是 langchain3. Github 地址4. 安装 Miniconda35. 创建虚拟环境6. 部署 langchain-ChatGLM7. 启动 langchain-ChatGLM8. 访问 langchain-ChatGLM9. API部署10. 命令行部署11. 其他,LangChain Documen…

深度学习—神经网络基础原理及循环神经网络

前向传播(Forward) 为什么要有激活函数 这里用两层来代表多层的神经网络举例:第一层的输出是第二层的输入,其中MM的W*X矩阵乘法,ADD是向量加法即加上偏置,如果每一层都只有线性变换,那么最终无…

RabbitMQ入门(详细)

RabbitMQ入门(详细) 初始消息队列消息队列初识为什么要使用消息队列?消息队列的特性 RabbitMQ介绍特点核心概念 Linux(CentOs7) 下安装:安装前配置:Erlang下载安装RabbitMQ下载安装linux下安装r…

泰安柒柒:国外问卷调查都有哪些题?

提到问卷调查我们并不陌生,它经常被用作调查市场、商品意见等多种调查中。不过,提到国外问卷调查,大家就比较陌生了。简单来说就是国外的一些企业或机构为了改进自己的商品或服务,会列出一些问题来让大众回答,并用付费…

配置 Ubuntu 的网络

一、三种联网的模式 1. 桥接 VMnet0------> 主机和 Ubuntu 都有一个 ip 地址 2. NAT 模式 VMnet8-------->Ubuntu 和主机是同一个 ip 地址 3. 主机模式 VMnet1-------> 只能和主机进行通信 二、网络配置 1. 虚拟机----->设置 2. 确保网络适配器是桥接模式或…

网络基础学习:osi网络七层模型

osi网络七层模型 什么是OSI,什么是ISO?为什么ISO要提出OSI网络七层模型?OSI七层的划分以及具体内容第七层 应用层第六层 表示层第五层 会话层第四层 传输层第三层 网络层第二层 数据链路层第一层 物理层 每一层与设备的对应关系 什么是OSI,什…

央国企专场培训:太极信创研习院第33期ITAIP信创精华班培训在常州成功举办

4月25-27日,由太极计算机股份有限公司(太极信创研习院)联合中国中车集团有限公司(科技质量与信息化部)、中车信息技术有限公司(中车学习培训发展中心)共同举办的“信息技术应用创新专业人员&…

Java并发编程实践学习笔记(三)——共享对象之可见性

目录 1 过期数据 2 非原子的64位操作 3 锁和可见性 4 Volatile变量(Volatile Variables) 在单线程环境中,如果向某个变量写入值,在没有其他写入操作的情况下读取这个变量,那么总能得到相同的值。然而&…

java状态机实现订单状态转移

一、状态机 状态机是状态模式的一种应用,相当于上下文角色的一个升级版。在工作流或游戏等各种系统中有大量使用,如各种工作流引擎,它几乎是状态机的子集和实现,封装状态的变化规则。状态机可以帮助开发者简化状态控制的开发过程…

APP界面设计都有哪些好用的软件推荐

基于APP界面的不同功能,所选择的APP界面设计软件也会有所不同。然而,并不是说所有的APP界面设计软件都非常精通,熟练地学习几个常用的APP界面设计软件。以下10个APP界面设计软件将为您的团队提供绘制APP界面所需的必要功能。 1.即时设计 即…

OpenCV-Python实战(7) —— OpenCV 实现抖音视频倒放效果

1. 需求分析 参考:十行Python代码制作一个视频倒放神器,由于最近在学习 OpenCV ,因此试着使用 OpenCV 进行实现,学以致用(胡乱折腾)。 需要视频倒放,因此需要读取视频cv.VideoCapture&#xff1…