【shell脚本】数组

news2024/11/15 14:05:15

数组

  • 一、数组
    • 1.1数组的定义方法
    • 1.2数组包括的数据类型
    • 1.3获取数组的元素
    • 1.4数组追加
    • 1.5向函数传入数组的值
  • 二、排序算法
    • 2.1冒泡排序
    • 2.2直接选择排序
    • 2.3插入排序
    • 2.4反转排序

一、数组

1.1数组的定义方法

格式

方法一:
数组名=(1 2 3 4 5#把列表用小括号括起来即可
方法二:
数组名=[0]=1 [1]=2 [2]=3#定义每个下标对应的数字或符号
方法三:
列表名="1 2 3 4 5" 
数组名=($列表名)#定义一个列表,再用小括号括起来,即可
方法四:
数组名[0]="num1"
数组名[1]="num2"
数组名[2]="num3"
数组名[3]="num3"
#通过数组名加下标定义或者追加

1.2数组包括的数据类型

  • 数值类型
  • 字符类型(需要使用" "或者’ '定义)

1.3获取数组的元素

这里使用num做示例
num=(10 20 30 40 50)
用num定义一个数组

#获取所有元素的列表
${num[@]}
${num[*]} #$@与$*不加引号表现一致,加了”“$*则把所有元素列表当作一个整体

#获取所有元素的下标
${!sum[@]}
${!sum[*]}

#获取数组的元素个数/长度
${#sum[@]}
${#sum[*]}

#获取数组的某个元素值
${sum[下标]}

#删除数组某个元素
unset num[下标]

#删除数组
unset num

#数组切片,获取从数组的某个下表开的是少个元素
${num[@]:下标:长度}

#数组字符替换
${num[@]/旧字符/新字符}

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

1.4数组追加

方法一:
num[下标]=#可以在后面追加或者替换一个函数值

方法二:
num[${num[@]}]=#获取数组的长度,在后面追加一个值,如果数字值有空缺则,或替换一个函数

方法三:
num+=(1 2) #最方便,切不容易出错,直接在数组后面追加一个值

方法四:
num=("${num[@]}" "date" "arry") #与方法二类似,获取数组的长度,在后面追加数值,如果数值是字符串类型则需要用”“引起来,用”“号则最好使用$@

在这里插入图片描述

1.5向函数传入数组的值

格式

a() {
 newar=($@)#通过$@获取调用函数后面跟的所有参数,组成新的数组
 echo ${newar[@]} #输出这个数组  
}
num=(11 22 33 44) #定义一个数组
arry(a ${num[@]}) #调用函数后面跟的参数为数组
a

在这里插入图片描述

二、排序算法

2.1冒泡排序

  • 基本思想:冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
  • 算法思路:冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

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

2.2直接选择排序

  • 外层循环控制循环的轮次,为数组的长度减一,内存循环取通过下标取第一个数与后面所有数做比较,如果大于则交换位置,对比和交换的次数随着排序的轮次减少而减少。
    在这里插入图片描述
    在这里插入图片描述

2.3插入排序

  • 将等待排序的第一个元素与,已排好序的每一个元素做对比如果如果以排好序的元素大,则交换位置。

  • 在这里插入图片描述

2.4反转排序

  • 把数组的最后一个元素与第一个元素做交换,倒数第二个元素和第二个元素做替换,以此类推
  • 在这里插入图片描述

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

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

相关文章

Ubuntu本地快速搭建web小游戏网站,公网用户远程访问【内网穿透】

文章目录 前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar内网穿透3.2 创建隧道3.3 测试公网访问 4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子域名 转载自cpolar极点云的文章:在Ubunt…

一款国产开源数据同步中间件,支持多种数据源和预警功能

DBSyncer是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。 支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。 特点 组合驱动,自定…

数据表的创建和管理 (数据库)

目录 一、数据表结构的创建 1、利用create命令创建表 2.关于创建表时运用约束的说明 (1)空值约束(NULL or NOT NULL) (2)主键约束(primary key constraint) &#x…

系统集成项目管理工程师知识点总结

项目经理的五种权利: 职位权力: 来源于管理者在组织中的职位和职权。罚权力: 使用降职、扣薪、惩罚、批评、威胁等负面手段的能力。奖励权力: 给予下属奖励的能力专家权力: 来源于个人的专业技能。参照(号…

Centos 搭建 不同的ftp用户对目录分级管理

目标: 建立ftp服务器目录 ftp_repository 使用用户名和密码登陆对它有读写权限,在该目录下建立子目录public可以匿名登陆,对其只有读权限 操作笔记: 通过创建用户时,创建ftp_repository 并且不能ssh telnet等工具登陆…

开关电源基础05:基本开关电源电感器设计(2)

说在开头:关于第五届索尔维会议(2) 索尔维会议的第四天休会,第五天开始自由讨论,大家都想站起来发言,会场一片混乱。大会主席洛伦兹不断拍桌子,让大家保持安静,可现场还是太乱&…

MATLAB实现人脸识别

本篇博文基于MATLAB实现人脸识别,基于几何特征的算法,对人脸从图像采集、预处理、到特征点定位提取,校验通过;主要利用YCbCr肤色模型,通过连通分量提取算法定位人脸;对RGB图像通过形态学图像处理算法选定区…

设置适合自己使用习惯的idea开发工具

一、配置方面 设置软件开启时候的最大内存128m够了,设置最大运行内存为8G,电脑配置好的一定要改,能极大的提升流畅性! 二、好用的插件 1.MyBatisLogFormat是一款用于将控制台中打印出的sql、参数拼装成完整sql语句的idea插件 …

头部企业走入无人区,国产数智化厂商挑大梁

本文转自数智前线 文|石兆 编|游勇 央国企数智化与信创化双重需求叠加,国产厂商挑大梁,助力企业升级数智化底座,实现价值化国产替代。 4月,在北京用友产业园的数智剧院里,近千位来自30个行业…

Maven 私服 Nexus 3.44 搭建

文章目录 1. 安装 Nexus2. Nexus 程序2.1. 启动 nexus 程序,添加运行参数 start2.2. 查看 nexus 程序运行状态,添加运行参数 status2.3. 停止 nexus 程序,添加运行参数 stop 3. 浏览器访问 Nexus GUI3.1. 默认端口3.2. 自定义端口3.3. 初次登…

安全从业人员职业发展和规划

文章来源于owasp,分享嘉宾t0data。 1、为什么做这次分享? 2、人生周期三模型 3、职业生涯阶段划分 4、通用职业发展路径 5、当前安全行业前景如何? 6、安全就业行情如何? 7、安全行业就业市场岗位划分 8、什么是相对比较好的履历…

如何系统全面的自学自动化测试?明确后我直接拿到了20K

玩自动化测试多年的老司机带你上车全面系统学习自动化测试,并且还能教你如何学习才能在今年拿到一份不错的offer。 说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习自动化测试都是为了高薪工作,《史记…

【异步电机系列】电机参数离线辨识(含源码实现)

【一、闲话 很久没有认真更新自己的博客了!正好这段时间在学习异步电机控制,所以把过程中的一些东西写下来,当是回顾也是备忘。本来想是把整个过程的问题和收获都记录下来的(包括硬件设计、mcu控制、算法等)&#xff0…

FFT变换后得到什么?

FFT FFT 快速傅里叶变换,是利用计算机计算DFT的高效、快速计算的方法的统称。 将信号从时域变换到频域范围内。 matlab中的fft 语法: Y fft(X) Y fft(X,n) Y fft(X,n,dim)说明 Y fft(X) 用快速傅里叶变换 (FFT) 算法计算 X 的离散傅里叶变换 (D…

ApiPost简单使用

目录 环境与变量 设置与使用 随机参数变量 内置Mock字段随机参数 自定义随机参数 全局参数 使用手册 apipost可支持一键压测和自动化接口测试 环境与变量 设置与使用 设置 环境变量可设置环境名称、变量名称、变量初始值、URL: 可以在请求变量或者接口 URL…

《精英的傲慢:好的社会该如何定义成功》笔记与摘录二

目录 ​编辑 笔记与摘录 1、阶层跃升的话语 2、优绩至上理念的核心 3、优绩为什么重要 4、不平等是制度的失败,还是你的失败? 5、一种思考什么样的社会是公正的社会的方法 6、赚很多钱意味着什么 7、当市场价值被看作社会贡献的代表后 8、当市…

FS7M0880YDTU专为离线SMPS设计,VN7040AJTR和VN7016AJTR器件是用于汽车转向指示器

FS7M0880YDTU 是专门为离线SMPS设计的,具有最小的外部组件。该Power Switch(FPS)器件由高压功率SenseFET和电流模式PWM控制器IC组成。PWM控制器包括集成固定振荡器、欠压锁出、前缘消隐块、优化栅极通/关断驱动器、热关断保护、过压保护、用于环路补偿的温度补偿精密…

开源项目九死一生,但很多程序员坚持开源??

大家好,欢迎来到停止重构的频道。 本期我们讨论一个开放问题。 为什么流行的开源项目只是凤毛麟角,且很多有名的开源项目都是背靠大公司的。 但是,为什么还有很多个人开发者愿意开源项目呢? 欢迎大家把自己的想法或开源项目发…

实现一个简单的前端脚手架

核心要点 前端脚手架概念实现前端脚手架 什么是前端脚手架? 随着前端工程化的概念越来越深入人心,脚手架应运而生。简单来说,「前端脚手架」就是指通过选择几个选项快速搭建项目基础代码的工具 前端脚手架可帮我们做什么? 可…

fine tune openAI model ( 微调chatgpt)

了解如何为自己的应用程序定制模型。 介绍 微调可以从API提供的模型中获得更多信息: 比 prompt 设计更高质量的结果能够在超过 prompt 范围的示例上进行训练更短的 prompt 节省了token更低的延迟请求 微调包括以下步骤: 准备并上传训练数据训练一个…