Shell之(数组)

目录

一、shell数组

1.数组的定义

2.定义数组的方法

第一种

 第二种

第三种 

第四种  

3.数组分片

4. 数组字符替换

临时替换 

永久替换 

5.删除数组  

 删除指定的下标

删除整组 

6.数组遍历和重新定义 

7.数组追加元素

方式一:指定位置添加

方法二: 末尾追加元素

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

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

8.用函数判断数组是否完整 

9. Shell向函数传数组参数

 10.Shell从函数返回数组 

二.数组排序算法(拓展)

1.冒泡排序

2.直接选择排序

3.反转排序


一、shell数组

1.数组的定义

由多个元素之间以空格分隔的元素组成
数组的元素可使用的数据类型可以是:数字 或 “字符串” / ’字符串‘;元素存在下标等于n-1.

2.定义数组的方

第一种
数组名=(值1  值2  值3  ... )以空格间隔,如果值为字符类型,需要加单引号或双引号
[root@localhost ~]# a=(1 2 3 4 5 6)
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5 6
[root@localhost ~]# echo ${a[*]}       # @和*作用都一样查看数组全部
1 2 3 4 5 6
[root@localhost ~]# echo ${a[0]}       # 通过下标查看具体值
1
[root@localhost ~]# echo ${a[1]}
2
[root@localhost ~]# echo ${a[2]}
3
[root@localhost ~]# 

 查看下标

  • [root@localhost ~]# echo ${!a[*]}      # !显示下标
    0 1 2 3 4 5
    

获取元素长度

  • [root@localhost ~]# echo ${#a[*]}        # 添加#显示长度
    6


 第二种
 
2.数组名=([0]=值 [1]=值 [2]=值 ...)

第三种 
列表名="value0 value1 value2 ..."数组名=($列表名)

第四种  
数组名 [0]="value"数组名 [1]="value"数组名 [2]="value" 
echo ${z[*]}   #所有元素展开
echo ${#z[*]}  #查看长度
echo ${!z[*]}  #查看下标

 

3.数组分片

echo ${数组名[@]:下标:长度}echo ${数组名[*]:下标:长度}

echo ${z[*]:1:2}   2:保留几位1:从指定下标开始

4. 数组字符替换

临时替换,字符串替换而不是替换元素组内容

echo ${数组名[@]/旧字符/新字符}数组名=(${数组名[*]/旧字符/新字符})        通过重新定义的方式实现永久替换

 

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

 

永久替换 
数组名=(${数组名[*]/旧字符/新字符})

5.删除数组  

根据下标删除某个下标和删除整个数组

unset 数组名[下标]                删除数组的某个下标unset 数组名                     删除数组

 删除指定的下标

 

删除整组 

6.数组遍历和重新定义 

zz=(2 4 6 8 10)
n=0
for i in ${zz[@]}
doarr[$n]=$[i*2]let n++
done

7.数组追加元素

方式一:指定位置添加
数组名[新下标]=新元素
方法二: 末尾追加元素
格式: 数组名[${#数组名[*]}] =新元素   或     数组名[${#数组名[@]}] =新元素

方式三:进行末尾多元素追加
数组名=("${数组名[@]}" 新元素1 新元素2 ....)
方法四:直接末尾追加多元素且格式最为简单 
数组名=("${数组名[@]}" 新元素1 新元素2 ....) 

8.用函数判断数组是否完整 

#!/bin/bash
#判断一个数组是否完整
array1=(10 20 30 40 50 60)
array3=([0]="a" [1]="b" [2]="c" [3]="d" [5]="f")#获取数组长度
length1=${#array1[@]}
length3=${#array3[@]}#获取长度n - 1 的下标
last1=$[length1 - 1]
last3=$[length3 - 1]#获取数组最后一个元素下标
last1_num=$(echo ${!array1[@]} | awk '{print $NF}')
last3_num=$(echo ${!array3[@]} | awk '{print $NF}')#判断长度n - 1 的下标 是否与 数组最后一个元素下标 相同
if [ $last1 -eq $last1_num ];thenecho "array1 数组完整"
elseecho "array1 数组不完整"
fiif [ $last3 -eq $last3_num ];thenecho "array3 数组完整"
elseecho "array3 数组不完整"
fi

 

函数名() {数组2=($@)         #在函数体内将传入的列表重新组成数组....
}函数名 ${数组1[@]}      #在函数体外将数组分解成列表传入

9. Shell向函数传数组参数

函数名() {数组2=($@)         #在函数体内将传入的列表重新组成数组....
}函数名 ${数组1[@]}      #在函数体外将数组分解成列表传入

 10.Shell从函数返回数组 

函数名(){....echo ${数组2[@]}     #在函数体内以列表形式返回值
}数组1=(函数名 参数)      #在函数体外将函数执行的结果重新组合成数组

 

二.数组排序算法(拓展)

1.冒泡排序

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

基本思想

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到

数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部

 

算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因

为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用

于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少

 

2.直接选择排序

与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。

基本思想:
将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

实操 

3.反转排序

概述

以相反的顺序把原有数组的内容重新排序

基本思想

把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所

有数组元素反转替换

实操↓

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

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

相关文章

【JavaScript】WeakMap 和 WeakSet

Map Map 用于存储键值对。 添加属性: 使用 Map 的 set() 方法可以向 Map 对象中添加键值对。例如: const map new Map(); map.set(key1, value1); map.set(key2, value2);通过二维数组快速创建 map 键值对。 let arr [[1, 2],[2, 3],[3, 4]]let map …

计算机Java项目|Springboot高校心理教育辅导设计与实现

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

yolov9训练自定义数据

1.训练yolov9,先准备好一份自定义数据.。到roboflow下载一份数据,数据格式是yolo格式。 2.到github下载yolov9源码 https://github.com/WongKinYiu/yolov9 3.为了方便配置环境,把代码上传到矩池云上面,使用云服务器 4.执行 pip i…

JSP+SQL学生成绩管理系统

Java版本:1.8 数据库:MySQL 框架:Spring Spring MVC MyBatis 服务器:Tomcat 前端解析框架:Thymeleaf 开发工具:Idea 2017 版本管理工具:Maven 版本控制工具:GitHub 经过对系统的需…

解决kali Linux安装后如何将语言修改为中文

开启虚拟机 用root用户进入终端 进入终端执行dpkg-reconfigure locales命令 选择en_US.UTF-8 UTF-8选项,按空格键将其取消。 选择zh_CN.UTF-8 UTP-8,按空格选择,按tab键选择ok。 选择zh_CN.UTF-8字符编码,按tab键选择ok&#xff0…

jQuery EasyUI textbox 值取不到问题

用textbox 存值点击修改的时候有些字段是不能更改的所以将textbox 的disabled属性设为true后 像这里的textbox disabled属性设为true是灰的 点击保存时这两个值没传 我们可以在提交保存前先将disabled属性先设为false,保存后又设为true

简单记录下:Navicat 导出表结构至 Excel

首先我们需要通过sql语句查询出相关的表结构的结构 SELECT COLUMN_NAME AS 字段名称,COLUMN_TYPE AS 字段类型,IF(IS_NULLABLENO,否,是) AS 是否必填,COLUMN_COMMENT AS 注释FROM INFORMATION_SCHEMA.COLUMNSWHERE table_schema bs-gdsAND table_name sys_menu;查询的结构如下…

软考-软件工程

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件 问题的工程,目的是提高软件生产率、提高软件质量、降低软件成本。 概述: 软件开发模型:指导软件开发的体系 需求分析确定软件…

OpenAI春季发布会速览,盘点近30天AI大事件

OpenAI发布会速览 北京时间5月14日凌晨1点,OpenAI在官网举行了"春季更新"活动,推出了全新的旗舰模型“GPT-4o”, 这款模型具备处理文本、图片、视频、语音的全能处理能力,能实时响应用户需求,并进行语音回应…

鸿蒙应用布局ArkUI:【其他常用布局容器和组件】介绍

其他常用布局容器和组件 创建轮播(Swiper)实现轮播图功能 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 栅格布局(GridRow/GridCol)和Grid布局类似…

练习题(2024/5/15)

1有多少小于当前数字的数字 给你一个数组 nums&#xff0c;对于其中每个元素 nums[i]&#xff0c;请你统计数组中比它小的所有数字的数目。 换而言之&#xff0c;对于每个 nums[i] 你必须计算出有效的 j 的数量&#xff0c;其中 j 满足 j ! i 且 nums[j] < nums[i] 。 以…

解决MobaXterm无法连接虚拟机问题

MobaXterm 无法连接到虚拟机可能是由于多种原因引起的。以下是一些可能的解决方法&#xff1a; 检查网络配置&#xff1a; 确保虚拟机和 MobaXterm 所在的主机在同一网络中&#xff0c;并且能够相互通信。可以尝试使用 ping 命令来测试两者之间的连通性。确保虚拟机的网络设置正…

Spring 各版本发布时间与区别

版本版本特性Spring Framework 1.01. 所有代码都在一个项目中 2. 支持核心功能IoC、AOP 3. 内置支持Hibernate、iBatis等第三方框架 4. 对第三方技术简单封装。如&#xff1a;JDBC、Mail、事务等 5. 只支持XML配置方式。6.主要通过 XML 配置文件来管理对象和依赖关系&#xff0…

时间序列预测:探索性数据分析和特征工程的实用指南

时间序列分析是数据科学和机器学习领域最广泛的主题之一:无论是预测金融事件、能源消耗、产品销售还是股票市场趋势&#xff0c;这一领域一直是企业非常感兴趣的领域。 随着机器学习模型的不断进步&#xff0c;使除了传统的统计预测方法(如回归模型、ARIMA模型、指数平滑)外&a…

Benedict Evans:Ways to think about AGI思考 AGI 的方法:

​Benedict Evans本文发布于2024 年 5 月 4 日 How do we think about a fundamentally unknown and unknowable risk, when the experts agree only that they have no idea? 当专家们一致认为他们一无所知时&#xff0c;我们如何看待根本上未知和不可知的风险&#xff1f; T…

程序验证之Dafny--证明霍尔逻辑的半自动化利器

一、What is Dafny?【来自官网介绍 Dafny 】 1)介绍 Dafny 是一种支持验证的编程语言&#xff0c;配备了一个静态程序验证器。 通过将复杂的自动推理与熟悉的编程习语和工具相结合&#xff0c;使开发者能够编写可证明正确的代码&#xff08;相对于 {P}&#xff33;{Q} 这种…

表白成功率百分百的向女朋友表白网页源代码,向女友表白HTML源代码

表白成功率百分百的向女朋友表白网页源代码&#xff0c;向女友表白HTML源代码 效果&#xff1a; 完整代码下载地址&#xff1a;向女友表白HTML源代码 <!DOCTYPE html> <!--STATUS OK--> <html><head><meta http-equiv"Content-Type" c…

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 01 - 从一个简单模型开始学习之旅 前言一、从模板开始建模二、建模一个简单的连杆2.1 建模2.2 生成子系统 总结 前言 在产…

23.HashMap的put方法流程

一、put方法的流程图 二、put方法的执行步骤 首先&#xff0c;根据key值计算哈希值。然后判断table数组是否为空或者数组长度是否为0&#xff0c;是的话则要扩容&#xff0c;resize&#xff08;&#xff09;。接着&#xff0c;根据哈希值计算数组下标。如果这个下标位置为空&a…

第 397 场 LeetCode 周赛题解

A 两个字符串的排列差 模拟&#xff1a;遍历 s s s 记录各字符出现的位置&#xff0c;然后遍历 t t t 计算排列差 class Solution {public:int findPermutationDifference(string s, string t) {int n s.size();vector<int> loc(26);for (int i 0; i < n; i)loc[s…