Shell脚本攻略:数组

news2024/11/29 0:55:33

目录

一、理论

1.数组概述

2.定义数组

3.数组打印

 4.数组的数据类型及处理

5.数组赋值

6.数组遍历

7.数组切片

         8.数组替换

9.删除数组

10.追加数组中的元素

11.数组排序算法

二、实验

1.实验一

2.实验二

3.实验三


一、理论

1.数组概述

数组是Shell的一种特殊变量,是一组数据的集合,里面的每个数据被称为一个数组元素。

当前Bash仅支持一维索引数组和关联数组,Bash对数组的大小没有限制。

 

2.定义数组

(1)索引数组

       ① 方式一 

           数组名=(

            value0

            valuel

            value2

             …

             )

       ② 方式二 shell中,用小括号( )来表示数组,数组元素之间用空格来分隔

           数组名=(value0 valuel value2 …)

       ③ 方式三 采用键值对的形式赋值

           数组名=( [0]=value [1]=value [2]=value …)
       ④ 方式四 通过分别定义数组变量的方法来定义

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

       ⑤ 方式五

           列表名=“value0 valuel value2 …”
           数组名=($列表名)

(2)备注

 ① 数组中的元素,必须以"空格"来隔开,这是其基本要求;

 ②  定义数组其索引,可以不按顺序来定义,比如说:names=([0]=Jerry [1]=Alice [2]=David [8]=Wendy);

 ③ 字符串是SHELL中最重要的数据类型,其也可通过($str)来转成数组,操作起来非常方便;

3.数组打印

(1)打印单个数组元素

         ${数组名[下标]} 。当未指定数组下标时,下标默认从0开始

(2)打印全部数组内容

         ${数组名[@]}或 ${数组名[*]}

(3)打印数组元素的个数

         ${#数组名[@]}或 ${#数组名[*]}

 4.数组的数据类型及处理

(1) 使用" "或‘ ’定义:

       数值类型
       ② 字符类型

(2)处理数组

      直接获取元素的值及数组的信息

       获取单个元素的值

echo ${array[0]}	#获取第一个元素的值
echo ${array[-1]}	#获取最后一个元素的值

获取所有元素的值

echo ${array[*]}	
echo ${array[@]}

统计数组的长度

echo ${#array[*]}


5.数组赋值

如果下标不存在,则自动添加一个新的元素;如果下标存在,则覆盖原来的值

6.数组遍历

(1)标准的for循环

(2)for … in循环方法

(3)While循环法

7.数组切片

取数组中的某一段的元素的值

格式:
${数组名[@或*]}:起始位置(起始索引):长度

 

8.数组替换

格式:
$(数组名[@或*]/查找字符/替换字符}

(1)临时替换

(2)永久替换

 (3)匹配替换

${array[@]/x/y}     最小匹配替换,每个元素只替换一次

${array[@]//x/y}    最大匹配替换,每个元素可替换多次

${array[@]/x/}      最小匹配删除,只删除一个符合规定的元素

${array[@]//x/}     最大匹配删除,可删除多个符合规定的元素

${array[@]/#x/y}     从左往右匹配替换,只替换每个元素最左边的字符

${array[@]/%x/y}     从右往左匹配替换,只替换每个元素最右边的字符

9.删除数组

(1)使用unset删除数组

(2)匹配删除

#  每个元素,从左向右进行最短匹配
## 每个元素,从左向右进行最长匹配
%  每个元素,从右向左进行最短匹配
%% 每个元素,从右向左进行最长匹配

10.追加数组中的元素

(1)+=,待添加元素必须用“()"包围起来,并且多个元素用空格分隔

(2)当数组的元素非常多的时候,可以直接使用数组的长度作为自己将要追加的索引的值,这样就可以直接追加元素了。
因为原始数组的索引是从0开始的,所以用长度减去1就是原始数组的最后的以为索引值了,
那么自己将要添加的值应该是原始索引值的后一位,那显然就等于数组的长度值了。

 (3)双引号不能省略,否则,当数组array中存在包含空格的元素时会按空格将元素拆分成多个。
不能将“@“替换为“*”,如果替换为"*",
不加双引号时与"@"的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中。
可以简单的理解为:用*号是作为一个整体,而用@还是单个的个体。

$*、$@不加双引号时表现一致;加双引号时,$*会将所有参数作为一个整体。 

11.数组排序算法

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

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

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

在实际应用中,冒泡排序适用于对小规模数据进行排序.

    ③  假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:
1) 第一轮排序,此时整个序列中的元素都位于待排序序列,依次扫描每对相邻的元素,并对顺序不正确的元素对交换位置,整个过程如下图所示。

2) 第二轮排序,此时待排序序列只包含前 4 个元素,依次扫描每对相邻元素,对顺序不正确的元素对交换位置,整个过程如下图所示。


3) 第三轮排序,此时待排序序列包含前 3 个元素,依次扫描每对相邻元素,对顺序不正确的元素对交换位置,整个过程如下图所示。

4) 第四轮排序,此时待排序序列包含前 2 个元素,对其进行冒泡排序的整个过程如下图所示。

5) 当进行第五轮冒泡排序时,由于待排序序列中仅剩 1 个元素,无论再进行相邻元素的比较,因此直接将其并入已排序序列中,此时的序列就认定为已排序好的序列。

二、实验

1.实验一

冒泡排序(升序)

(1)脚本截图

(2)运行结果

2.实验二

df -h命令查询磁盘空间使用率,去百分号并降序排序

(1)脚本截图

(2)运行结果

3.实验三

获取索引下标,实现数组每个值乘2

(1)脚本截图

(2)运行结果

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

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

相关文章

MySQL InnoDB缓存池

缓存池的作用 缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。 为什么不把所有数据放到缓冲池中 凡事都具备两面性,抛开数据易失性不说,访问快速的反面是存储容量…

MongoDB 基本概念

MongoDB 部署模型 在生产环境中,MongoDB 经常会部署成一个三节点的复制集,或者一个分片集群。 我们先来看左边,当 MongoDB 部署为一个复制集时,应用程序通过驱动,直接请求复制集中的主节点,完成读写操作。另…

前端学习(DAY51)面试1

组件中的 data 为什么是一个函数? 如果 data 是对象的话,当数据改动时就会影响到所有的实例,可能会造成一些数据的冲突。 HTTP http:以安全为目标的http通道,HTTPs是以安全为目标的https通道(使用SSL进…

Linux--ServerProgramming--(3)详解高性能服务器程序框架

1. 服务器框架详解 1.1 服务器模型 1.1.1 C/S 模型 此模型很简单,就是服务器和客户端。 此模型 非常适合资源相对集中的场合。 缺点:因为服务器是通信的中心,当访问量过大时,可能所有的客户都将得到很慢的响应。此缺点可由 P2P…

利用PHP导出MySQL数据表结构和SQL文件

目录 一、获取数据库所有的数据表 方法一:TP5 方法二:原生PHP 二、导出指定数据表的数据结构 三、 导出SQL文件 四、生成SQL语句 五、完整代码 前端 后端 语言:PHP 数据库:MySQL 功能:分为四部分,① 查出数…

智大数据比赛的总结

强国杯个人赛一定要报 hive 和hadoop基础环境配置 开启单节点集群环境 (0 / 10 分) 本次使用环境为单节点集群,对应主机名为hadoop000,使用工具连接对应主机并进行相关操作。 环境中已经安装java、Hadoop、Hive、Mysql并配置对应环境变量,安装路径为/root/software/,对应…

通过python采集关键字搜索1688工厂数据接口,1688工厂数据接口,1688API接口

1688是一个行业网站,主要提供中小型批发和生产商的信息,是中国供应商向全球采购商展示其产品的平台。在1688上,可以找到许多工厂和制造商的信息,包括公司名称、地址、联系人、联系方式、主要产品等。 采集1688工厂数据可以帮助采…

MySQL数据库 2.启动与停止

目录 ​编辑 🤔 启动与停止: 🙂1.WIN加R调用windows命令行,输入:services.msc 🙂2.可以在cmd(管理员模式)中输入以下指令: 🤔 启动MySQ后的操作步骤&…

linux安装tomcat8

1.tomcat8下载 https://tomcat.apache.org/download-80.cgi 2.tomcat8安装 (1)将tomcat jar上传到usr/local目录 (2)解压tomcat压缩包 [rootiZ2ze7vthdl3oh0n0hzlu7Z local]# tar -zxvf apache-tomcat-8.5.58.tar.gz&#x…

开发小程序过程中的兼容难题,应当何去何从?

如今小程序开发已经成为了互联网行业发展的主流,而小程序开发过程中的兼容难题也让许多开发者感到头疼。那么小程序开发过程中兼容问题究竟有哪些,该如何解决?下面我们就针对这个问题展开一下分析。 什么是小程序? 小程序是一种无…

为什么魂斗罗只有 128KB 却可以实现那么长的剧情

经常看到有同学在抱怨现在的游戏、APP占用非常大的空间,基本都是 10G 起步。 这让我想到初中时玩过的一款游戏魂斗罗,为什么它只有 128KB 却可以实现那么长的剧情呢?这篇文章将会给大家讲讲这里面的奥秘~ 正文 现代程序员 A 和 1980 年代游戏…

小程序安装Vant Weapp详细步骤,下载和npm安装版

小程序安装Vant Weapp详细步骤 使用npm下载1、新建项目并初始化项目2、下载Vant Weapp3、修改 app.json4、构建 npm 包5、引入组件 下载方式1. npm下载或者下载[官方示例](https://github.com/youzan/vant-weapp)2. 把里面的dist文件夹复制出来,放到项目的根目录&am…

MKS SimpleFOC ESP32 例程7 双电机电流控制

Makerbase ESP32 FOC 例程7 双电机电流控制 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12ARDUINO UNO主板23MKS SF2804电机1412V电源适配器15USB 线1 注意:YT2804是改装的云台无刷电机,带有AS5600编码器,可实现360连续运转。…

恒流间歇滴定法(GITT)测试锂离子电池的实验流程

恒流间歇滴定法(GITT)测试锂离子电池的实验流程 锂电池作为现代电子设备中最常用的电源之一,其性能和安全性对于设备的正常运行至关重要。恒电流间歇滴定法是一种常用的测试方法,用于评估锂电池的容量、循环寿命和内阻等关键参数。…

黄色荧光染料:1811539-32-8,JF549,NHS,JaneliaFluor549,SE,JF549琥珀酰亚胺酯

【产品描述】 Janelia Fluor549,SE是一种黄色荧光染料,作为NHS酯提供,用于连接伯胺基。NHS酯部分可以与伯胺特异有效地反应,形成共价酰胺键。NHS活化酯是生物标记反应中常用的活化基团。NHS活化TAMRA分子中的羧基,让它…

Ubuntu pwn环境搭建

文章目录 前言环境准备系统安装安装VMtoolsapt换源安装pip并换源安装pwntools安装gdb插件安装one_gadget安装 LibcSearcher 后记参考 前言 重新装了一下pwn环境,踩到了好多坑,顺便记录一下 环境准备 ubuntu 20.04,可以到镜像站下载&#x…

[CTFTraining] 0CTF 2016 Unserialize

​ 打开环境后是这样: ​ 找了挺多地方没啥头绪,干脆直接上dirsearch: ​ 发现有源码泄露,直接下载下来分析。先进行自动审计: ​ 发现有疑似的漏洞,但根据题目来看是反序列化的,还是要自行进…

月报总结|Moonbeam 5月份大事一览

本月,Moonbeam迎来了Uniswap V3的部署,经过一年的社区讨论,UniSwap V3终于以5000万个同意票通过,将在未来一个月内部署于Moonbeam,为Web3用户提供更广泛公链生态的多链体验,加速应用之间跨链交互&#xff0…

平板电脑系统优化垃圾清理软件CleanMyMac X

CleanMyMac 这是一款苹果系统电脑的清理软件,无论是Mac、苹果笔记本电脑还是平板电脑都可以使用。垃圾清理操作简单又方便,不但专项清理各种垃圾,还能卸载垃圾软件。 对于刚拿到苹果电脑的朋友来讲,选择一些必备的mac软件可以省去…

opencv3 模板匹配与直方图

模板匹配 尽量加上归一化操作 像素差值计算,模板在原图上滑动 ① 模板匹配和卷积原理很像,模板在原图像上从原点开始滑动,计算模板与(图像被模板覆盖的地方)的差别程度(例如值127与值190的区别),这个差别…