【Linux】shell编程—数组

news2024/11/28 23:38:15

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、shell数组
    • 1,数组的概念
    • 2.数组的定义
  • 二、Shell数组操作
    • 1. 获取数组的所有元素的列表
    • 2. 获取数组的所有元素下标
    • 3.取数组的元素个数
    • 4. 获取数组的某个元素的值
    • 5.删除数组某个元素
    • 6.删除数组
    • 7.数组切片
    • 8.数组字符替换
    • 9.数组追加元素
      • 1.指定位置添加(直接赋予新值覆盖原来的元素)
      • 2.末尾追加元素
      • 3.进行末尾多元素追加
      • 4.直接末尾追加多元素
  • 三、数组在函数的传参


一、shell数组

1,数组的概念

数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。 组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。 用于区分数组的各个元素的数字编号称为下标。数组是用于储存多个相同类型数据的集合

特点:

  • 数组是相同数据类型的元素的集合。
  • 数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
  • 数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。

2.数组的定义

定义数组的四种方式:
方式一:

数组名=(值0 值1 值2 ...)

在这里插入图片描述

方式二:

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

在这里插入图片描述
方式三:

列表名="值0 值1 值2 ..."
数组名=($列表名)

在这里插入图片描述
方式四:

数组名[0]="值"
数组名[1]="值"
数组名[2]="值"
...

在这里插入图片描述

二、Shell数组操作

1. 获取数组的所有元素的列表

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

在这里插入图片描述

2. 获取数组的所有元素下标

echo ${!数组名[*]} 
echo ${!数组名[@]}

在这里插入图片描述

3.取数组的元素个数

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

在这里插入图片描述

4. 获取数组的某个元素的值

echo ${数组名[下标]}

在这里插入图片描述

5.删除数组某个元素

unset 数组名[下标]

在这里插入图片描述

6.删除数组

unset 数组名

在这里插入图片描述

7.数组切片

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

在这里插入图片描述

8.数组字符替换

echo ${数组名[@]/旧字符/新字符}

在这里插入图片描述

9.数组追加元素

1.指定位置添加(直接赋予新值覆盖原来的元素)

数组名[下标]=值

在这里插入图片描述

2.末尾追加元素

数组名[${#数组名[*]}] =新元素 
数组名[${#数组名[@]}] =新元素

在这里插入图片描述

3.进行末尾多元素追加

数组名=("${数组名[@]}" 值1 值2 ......值N)

在这里插入图片描述

4.直接末尾追加多元素

数组名+=(值1 值2 ......值N)

在这里插入图片描述

三、数组在函数的传参

要求:一个遍历数组的函数,并且让数组里的元素翻倍输出

#!/bin/bash
a=0
test(){
local arr=$@
for i in ${arr[@]}
do
    let i*=2
    arr[$a]=$i
    let a++
done
echo ${arr[@]}
}
############### main ###############
read -p "请输入一个数组:" num
arr=($num)
echo "数组翻倍后为:$(test ${arr[@]}) "

在这里插入图片描述

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

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

相关文章

Jmeter 压测 QPS

文章目录 1、准备工作1.1 Jmeter的基本概念1.2 Jmeter的作用1.3.Windows下Jmeter下载安装1.4 Jmeter的目录结构1.5 启动1.6 设置中文1.6.1 设置调整1.6.2 配置文件调整(一劳永逸) 2、Jmeter线程组基本操作2.1 线程组是什么2.2 线程组2.2.1 创建线程组2.2…

原型part学习NeurIPS2019

当我们面临具有挑战性的图像分类任务时,我们希望通过分解part来解释推理。每一类别的更多原型证据有助于做出最终分类决策。作者提出一种深度网络架构:Prototypical Part网络即ProtoPNet。网络通过寻找原型part来解释图像,并基于原型part进行…

同步 Swagger URL问题, 用这个插件就可解决

这个开源的 API 管理工具叫 Postcat, 支持从 Swagger URL 增量同步 API 数据到 Postcat。 使用 进入 API 模块,鼠标移动到主按钮加号,下拉看到从 Swagger 同步 URL 的选项。 填写完配置点击立即同步即可同步 API 数据。 同步规则 新的数据覆盖旧的数据…

PHP语言调用api接口,电商平台商品详情接口(封装可高并发)

PHP是为Web而生的语言,它提供了一些强大的内置函数来处理HTTP请求和响应。PHP为开发人员提供了一些Web开发工具,包括HTML、CSS、JavaScript以及各种数据库的连接和互动。与其他Web开发工具相比,PHP可以更加高效地运转与发挥作用。 PHP表现出…

Matlab 非线性迭代法(3)阻尼牛顿法 L-M

高斯牛顿法详解_我只是一只自动小青蛙的博客-CSDN博客 一、思想 先看一下牛顿高斯迭代法的缺点: 1、在计算的过程中可能会出现奇异矩阵(不满秩),比如:J(k)​)TJ(k) 为病态矩阵的时候就不能得到正确的解,或…

如何提升性能测试效能

上周六应邀在天津devops峰会的质量内建专场做了一次分享,主题是《稳定性保障利器:全链路压测》。 其中关于全链路压测对质量内建的意义,我做了一个总结,如下图所示。本文基于下图做了展开描述,仅供参考。 如何理解性能…

从零开始Vue3+Element Plus后台管理系统(八)——模仿禅道做一个Vue3版本的高级查询组件

暗黑模式 使用 Vue3element Plus 简单模仿了禅道系统的高级搜索组件,说简单也有点复杂,还没有完全开发完,但是大体架子有了,剩下一些功能点继续coding。边开发边记录吧,因为这个相比之前的内容确实复杂一些&#xff0c…

Java的基操,基操(一)

🔥二进制🔥二进制和十进制的转化🔥注释🔥标识符🔥关键字/保留字🔥变量(variable) 🔥二进制 二进制,是计算技术中广泛采用的一种数制,由德国数理哲学大师莱布尼茨于 1679 …

Helm chart 常用命令以及原理和生产实践

问: 到哪里去搜索helm package? 答: artifacthub.io Helm 的实质就是搞一些模版,最终依据这些模版生成k8s的系列yaml文件(deployemnt,service,secret,map等等),从而在k8s上能够简单部署出完整应用。可以用helm template查看最终生成的k8s部署文件。 helm version…

MQTT客户端应用编程及接口分析

MQTT客户端应用编程及接口分析 MQTT协议简介 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。 客户端服务端安装 1.安装 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-…

SpringCloud_服务注册中心_Consul(八)

SpringCloud_服务注册中心_Consul(八) 分为五部分 Consul简介 安装并运行Consul 服务提供者 服务消费者 三个注册中心异同点 Consul简介 官网:https://developer.hashicorp.com/consul/docs/intro 是Go语言写的 Consul是一套开源的分布式服务发现和配置管理系统&am…

GB50312-2016标准中需要检测的参数(AEMFLUKE)含双绞线和光

很多同学经常搞不清GB50312-2016标准的规定测试参数,或者说和测试设备对不上号。特意从标准中摘抄出来,供大家参考。 ACR-F(Attenuation to Crosstalk Ratio at the Far-end) 衰减远端串音比 ACR-N(Attenuation to Crosstalk Ratio at the Near-end)衰…

用于申威Alpha指令集处理器CModel裸机(不带操作系统)的CoreMark性能测试程序源码编译流程

CoreMark是一个综合基准,用于测量嵌入式系统中使用的中央处理器(CPU)的性能。它是在2009由eembc的shay gal-on开发的,并且试图将其发展成为工业标准,取代过时的dehrystone基准。代码用C编写,包含以下算法:列表处理(增删…

如何在Colab中使用gpu资源(附使用MMdet推理示例)

如何在Colab中“白嫖”gpu资源(附使用MMdet推理示例) Google Colab简介 当今,深度学习已经成为许多人感兴趣的话题,Google Colab(全称为Google Colaboratory)是Google推出的一个强大的云端 notebook&…

《微服务实战》 第七章 Spring Cloud 之 GateWay

前言 API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中处理一些非业务功能的逻辑,例如权限验证、监控、缓存、请求路由等。 1、通过API网关访问服务 客户端通过 API 网关与微服务交互时,客户端只需要知道 API 网关地…

UWB智慧工厂人员定位系统源码,人员在岗监控、车辆实时轨迹监控源码

近年来人员定位系统在工业领域的发展势头迅猛,工业识别与定位成为促进制造业数字化的关键技术。通过实时定位可以判断所有的人、物、车的位置。实时定位系统要适用于复杂工业环境,单一技术是很难实现的,需要融合多种不同的定位技术&#xff0…

【hive】hive grouping sets和GROUPING__ID的用法

前言​ GROUPING SETS,GROUPING__ID,CUBE,ROLLUP 这几个分析函数通常用于OLAP中,不能累加,而且需要根据不同维度上钻和下钻的指标统计,比如,分小时、天、月的UV数。 grouping sets根据不同的维度组合进行聚合,等价于…

从事网络安全工作,这五大证书是加分项!

对我们而言,无论从事什么工作,考取相关证书都有非常重要的作用,它是我们找工作时的加分项,同时也是对我们技术水平的验证,那么从事网络安全工作可以考哪些证书?本篇文章为大家介绍一下。 1、CISP 国家注册信息安全专业…

vue3【父子组件间的传值--setup语法糖】

这篇文章主要讲解vue3语法糖中组件传值的用法、 一、父组件给子组件传值 父组件 <template><div classmain>我是父组件<Child :msg"parentMsg"></Child></div></template><script setup> import Child from ./child im…

idea热部署插件JRebel激活

JRebel可以实现在idea中热部署项目&#xff0c;修改后不用重启项目&#xff0c;让开发更丝滑。 JRebel需要激活才可以正常使用。 不想安装服务的可以用我个人部署的服务器注册&#xff0c;不保证稳定哦&#xff0c;有问题可以留言。 安装完插件直接看激活。 http://121.5.183.2…