Shell脚本攻略:数组

2023-10-29

目录

一、理论

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)运行结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本攻略:数组 的相关文章

  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • pandas 替换多个值

    以下是示例数据框 gt gt gt df pd DataFrame a 1 1 1 2 2 b 11 22 33 44 55 gt gt gt df a b 0 1 11 1 1 22 2 1 33 3 2 44 4 3 55 现在我想根据
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 【会议资源】2022年第三届自动化科学与工程国际会议(JCASE 2022)

    2022年第三届自动化科学与工程国际会议 JCASE 2022 重要信息 会议网址 www ijcase org 会议时间 2022年10月14 16日 召开地点 中国成都 截稿时间 2022年8月30日 录用通知 投稿后2周内 收录检索
  • Spring给对象属性赋值的三种注入方式

    bean类 package com zxh model public class Student private String username private String password private Integer id publ
  • 2021年06月学习

    daily plan 2021 06 2021年06月 聊天室代码 https www jianshu com p b4e2a555ef4c https cshihong github io 2017 08 20 E5 9F BA E4 B
  • 第十一届蓝桥杯 D 题——REPEAT程序(文件数据读取与处理)

    前言 蓝桥杯不时会考察对文件的读取和处理 prog txt 解题思路 首先 我们将题目中给出的样例拿出来分析 REPEAT 2 A A 4 REPEAT 5 REPEAT 6 A A 5 A A 7 A A 8 A A 9 可得 式子 与
  • upload-labs详细教程

    目录 第一关 js检查 第二关 Content Type 第三关 黑名单验证 第四关 黑名单验证 htaccess绕过 第五关 黑名单验证 user ini 第六关 空格绕过 第七关 点绕过 第八关 DATA绕过 第九关 空格 绕过 第十一
  • 利用matlab从图片中提取曲线坐标数据

    目录 0 引言 1 思路详解与分析 2 MATLAB程序 0 引言 在读文献的时 经常遇到这样的情况 文章里提出的方法好有趣啊 好想拿文中用的数据来试试看看能不能得到相近的结果 可是文中只有根据原始数据绘制的曲线图 没有数据 如下图所示 此
  • LAMP系统构建论文

    毕业论文中文摘要 随着信息技术的不断发展 网络技术的不断完善 各种服务类平台层出不穷 在这样的环境下 Lamp系统架构应运而生了 并且经过不断的完善 俨然已成为国内外首屈一指的大型服务平台之一 Lamp Linux Apache MySQL
  • vue+阿里的G2图表-antv+折线图

    前言 之前使用的图表是echarts highcharts两个常用图表的 现在的话因为项目需要和别的原因也接触使用了阿里的g2图表 感觉效果还是挺好的 在这里分享下 官网入口 实现效果 实现步骤 第一 安装插件 npm install an
  • VS code 运行C/C++文件

    VS code 运行C C 文件 搞了一下午 搞得头疼 网上的教程五花八门 奈何VS code版本更新太快 于是 就出现了各种bug 就很难受 不过最终终于成功啦 所以做一个简短的小结 防止自己以后再装就忘了 第一步 下载mingw 这个直
  • 计算KL散度与JS散度的MATLAB程序-简单好用

    阅读目录 Content MATLAB小函数 计算KL散度与JS散度 1 MATLAB程序 2 结果 MATLAB程序 计算KL散度与JS散度 问题 给定两个向量 计算这两个向量之间的Kullback Leibler Divergence与
  • Unity之Animation窗口

    一 Animation窗口是用来干啥的 Animation窗口 直译就是动画窗口 它主要用于在Unity内部创建和修改动画 所有在场景中的对象都可以通过Animation窗口为其制作动画 二 打开Animation窗口 Window gt
  • Github上的十大机器学习项目

    原文作者 Matthew Mayo 译文地址 Top 10 Machine Learning Projects on Github 文章译者 赵屹华 搜狗计算广告工程师 前生物医学工程师 关注推荐算法 机器学习领域 文章审校 刘帝伟 Git
  • 学1个月爬虫就月赚6000?别被骗了,我来告诉你真实情况

    这是我前几天看到的一个真实事件 也是我写这篇文章的缘由 前几天有粉丝跟我反馈说 某机构的人跟他说学爬虫1个月就能接单 让这小伙子去报名那个机构的爬虫课程 学完之后1个月就能把6000多的学费赚回来 可能是因为我和粉丝的交流比较多 所以小伙子
  • 2.Python简介、特点、安装配置、pip包管理命令

    Python简介 Python 语言 语言 人与人之间交流需要语言 比如说汉语 英语 编程语言就是人与机器交流的语言 面向过程往面向对象的过渡 例 C C C sharp Java是面向对象 面向过程 面向过程可以认为是流程 一步一步操作
  • HMM隐马尔可夫模型进行中文文本分词

    文章目录 一 HMM简述 1 引入 2 隐马尔科夫模型 1 定义 Definition of a hidden Markov model 2 应用 3 前向算法 了解 4 维特比算法 5 前向 后向算法 了解 二 使用HMM进行文本分类 1
  • [Python系列-14]:人工智能 - 数学基础 -4- 数组元素的线性代数运算(向量、矩阵运算)

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119301224 目录 第1章
  • Configuring App Transport Security Exceptions in iOS 9 and OSX 10.11

    What is App Transport Security ATS At WWDC 2015 Apple announced App Transport Security for iOS 9 and OSX 10 11 El Capita
  • 聊一聊深度学习--包括计算前馈网络的反向传播和卷积的反向传播

    聊一聊深度学习 三天肝完深度学习基础 球球让我过吧 引言 人工智能领域的流派 机器学习流程 了解 表示学习 语义鸿沟 好的数据表示 语义表示 局部表示 分布式表示 学习过程 监督学习 有反馈 无监督学习 无反馈 强化学习 多步之后反馈 神经
  • h5跳转App以及URL Scheme获取-App协议列表

    从Safari跳到APP 跳转 既然要想跳到你指定的APP 那么就需要在你的APP中定义一个特殊的标示 也就是一个URL协议 定义URL协议的如下图 TARGETS gt info gt URL Types gt 添加一个URL协议 Sni
  • Shell脚本攻略:数组

    目录 一 理论 1 数组概述 2 定义数组 3 数组打印 4 数组的数据类型及处理 5 数组赋值 6 数组遍历 7 数组切片 8 数组替换 9 删除数组 10 追加数组中的元素 11 数组排序算法 二 实验 1 实验一 2 实验二 3 实验