Linux Shell编程--数组

news/2024/9/17 19:06:56/ 标签: linux, 运维, 服务器

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除!

一、简介

Shell 脚本中的数组允许你存储多个值,并可以通过索引访问它们。Shell 中的数组是一维的。

二、声明数组

在Shell中声明普通数组:只能用整数作为数组的索引 ;基本语法如下:

 array_name=(value1 value2 value3 ...)​# 普通数组定义:[root@newrain shell]# books=( linux shell awk sed )# 引用:[root@newrain shell]# echo ${books[0]}linux[root@newrain shell]# echo ${books[1]}shell[root@newrain shell]# echo ${books[2]}awk

关联数组:可以使用字符串作为数组的索引;基本语法如下:

 declare -a array_namearray_name=(value1 value2 value3 ...)​# 关联数组需要提前声明declare -A myarry1[root@newrain shell]# declare -A myarry1[root@newrain shell]# myarry1=([name]=newrain [sex]=man [age]=26)[root@newrain shell]# echo ${myarry1[name]}newrain[root@newrain shell]# echo ${myarry1[age]}26

三、访问数组元素

使用索引来访问数组中的元素。索引从0开始。

 echo "${array_name[0]}" # 输出数组的第一个元素

四、遍历数组

可以使用for循环来遍历数组中的所有元素。

 for element in "${array_name[@]}"; doecho $elementdone

五、获取数组长度

Shell中没有内置的数组长度属性,但可以通过以下方式获取:

 length=${#array_name[@]}echo "Array length is $length"

六、多维数组

Shell 不原生支持多维数组,但可以通过一些技巧来模拟:

 # 声明declare -a array_2darray_2d=([0]="row1col1 row1col2" [1]="row2col1 row2col2")​# 访问echo "${array_2d[0]}"  # 输出 row1col1 row1col2echo "${array_2d[0][col_index]}"

七、常用数组操作

1、添加元素

 array_name+=("new_element")

2、删除元素

 unset array_name[index]

3、反转数组

reverse_array=("${array_name[@]}") # 创建副本
reverse_array=( $(echo "${reverse_array[@]}" | rev) )

4、查找元素

 index=0for element in "${array_name[@]}"; doif [ "$element" == "search_element" ]; thenecho "Found at index $index"breakfi((index++))done

5、排序数组

 IFS=$'\n' # 改变内部字段分隔符sorted_array=( $(sort <<<"${array_name[*]}") ) # 排序unset IFS # 重置内部字段分隔符

八、shell数组中"*" 和 "@" 区别

 “*”当变量加上“” 会当成一串字符串处理.“@”变量加上“” 依然当做数组处理.在没有加上“” 的情况下 效果是等效的.

示例

 # 声明并初始化数组my_array=("apple" "banana" "cherry")​# 输出数组元素for i in "${!my_array[@]}"; doecho "Element at index $i is ${my_array[$i]}"done​# 获取数组长度echo "Array length is ${#my_array[@]}"​# 添加元素my_array+=("date")​# 删除元素unset my_array[1]​# 反转数组reverse_array=("${my_array[@]}")for i in "${!reverse_array[@]}"; doecho "${reverse_array[$((${#reverse_array[@]} - 1 - i))]}"done​# 查找元素index=0for element in "${my_array[@]}"; doif [ "$element" == "banana" ]; thenecho "Banana found at index $index"breakfi((index++))done​# 排序数组sorted_array=( $(sort <<<"${my_array[*]}") )echo "Sorted array: ${sorted_array[@]}"

注意事项

  • 数组元素中的空格需要用双引号括起来,以避免被拆分。
  • 索引操作和遍历时要注意引号的使用,以确保字符串被正确处理。
  • 由于Shell的限制,数组操作可能不如其他编程语言直观。

总结

Shell中的数组虽然功能有限,但通过一些技巧和方法,仍然可以有效地进行数组操作和处理。

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!


http://www.ppmy.cn/news/1507167.html

相关文章

鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南

文章目录 一、消息提示框&#xff08;showToast&#xff09;1、导入模块2、语法3、参数4、示例5、效果 二、对话框&#xff08;showDialog&#xff09;1、导入模块2、语法3、参数4、示例5、效果 三、警告弹窗&#xff08;AlertDialog&#xff09;1、语法2、参数3、AlertDialogP…

docker安装redis单机部署的redis.conf配置

下面是一个简单的 Redis 配置文件 (redis.conf) 示例&#xff0c;它适合docker单机部署环境&#xff0c;并且启用了密码保护。这个配置文件包含了最基本的设置&#xff0c;您可以根据需要进行扩展。 # 服务器监听的地址 bind 0.0.0.0# 服务器监听的端口 port 6379# 设置密码 r…

期权价格的奥秘:深入理解影响因素

在金融市场中&#xff0c;期权作为一种衍生工具&#xff0c;为投资者提供了风险管理和资产增值的多种可能性。期权价格的波动往往令人着迷&#xff0c;但其背后的定价机制却充满了复杂性。本文将带您探索期权价格变化的奥秘&#xff0c;并尝试以浅显易懂的方式&#xff0c;解析…

Oceanbase 执行计划

test100 CREATE TABLE `test100` ( `GRNT_CTR_NO` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT 担保合同编号, `GRNT_CTR_TYP` varchar(3) COLLATE utf8mb4_bin NOT NULL COMMENT 担保合同类型, `COLC_GRNT_IND` varchar(1) COLLATE utf8mb4_bin DEFAULT NULL …

1.Windows安装Maven和搭建Nexus私服

一、Windows安装Maven 首先安装jdk。这个没什么说的。接着安装Maven 下载Maven的安装包&#xff0c;解压到 D:\apache-maven-3.5.2 然后新建用户环境变量M2_HOME&#xff1a; 接着编辑用户环境变量Path&#xff0c;增加%M2_HOME%\bin&#xff08;下图中少写了一个%&#xff…

Postman接口测试工具使用方法

Postman 是一个强大的 API 开发和测试工具&#xff0c;广泛用于开发、测试和文档编写。 安装 Postman&#xff1a; 前往 https://www.postman.com/ 官网 下载适用于你的操作系统的安装包。安装完成后&#xff0c;启动 Postman。 创建账户&#xff08;可选&#xff09;&#…

视频号直播回放怎么下载?

一、如果是下载自己直播回放视频&#xff1a; 方法一&#xff1a;视频号助手 打开网址&#xff1a;视频号助手 登陆账号后。下面路径&#xff0c;先点击成回放&#xff0c; 后就可以在下面路径&#xff0c;下载全场回放 但是这种有个缺点&#xff0c;就是不能分段下载。这样…

【ES6】使用Set和Map进行全组合判断

判断数据集是否为全组合关系 例如下列表格&#xff0c;字段1包含&#xff08;甲、乙&#xff09;值&#xff0c;字段2包含&#xff08;a、b&#xff09;值&#xff0c;字段3包含&#xff08;1、2、3&#xff09;值&#xff0c;每种组合情况都可以在数据集的行记录中找到有且仅…

QT实现一个系统参数管理窗口

为了实现一个管理系统参数的设计&#xff0c;我们可以创建一个配置参数类来封装配置的读取和写入操作&#xff0c;并使用一个 QWidget 作为用户界面来管理这些参数。以下是如何设计一个这样的系统&#xff0c;包括配置参数类和管理界面。 1. 配置参数类 我们创建一个 ConfigM…

数据库篇--八股文学习第十八天| MySQL和Redis的区别是什么;Redis有什么优缺点?为什么用Redis查询会比较快

1、MySQL和Redis的区别是什么 答&#xff1a; Redis基于键值对&#xff0c;支持多种数据结构&#xff1b;而MySQL是一种关系型数据库&#xff0c;使用表来组织数据。Redis将数据存在内存中&#xff0c;通过持久化机制将数据写入磁盘&#xff0c;MySQL通常将数据存储在磁盘上。…

Ubuntu安装 IDEA

一、在官网下载 IDEA 下载IDEA For LinuxDownload the latest version of IntelliJ IDEA for Windows, macOS or Linux.https://www.jetbrains.com/idea/download/?sectionlinux下载好的安装包解压到/opt/中&#xff0c;目录名更改为 idea 二、对/opt/idea 目录下所有文件授予…

Java开发工具IDEA

IDEA概述 Intellij IDEA IDEA全称Intellij IDEA&#xff0c;是用于Java语言开发的集成环境&#xff0c;它是业界公认的目前用于Java程序开发最好的工具。 集成环境 把代码编写&#xff0c;编译&#xff0c;执行&#xff0c;调试等多种功能综合到一起的开发工具。 IDEA下载和安…

Unity自带的UGUI ScrollView刷新不及时问题

self:RefreshCommentsList()self.scrollView self.CommentsView:GetComponent(ScrollRect) self.scrollView.verticalNormalizedPosition 0如上所示&#xff0c;当我想刷新Unity中的一个ScrollView的列表后&#xff0c;将这个列表瞬间移至底部。但是上述这三行代码会出现一个…

关于网络数据的一些思考

为了给游戏用户带来更好的体验&#xff0c;但又想兼顾稳定性&#xff0c;因此有了kcp这样的技术&#xff0c;可如果是面临海外产品这是远远不够的 不同国家&#xff0c;不同地区&#xff0c;不同企业&#xff0c;不同用户所使用的设备千奇百怪。甚至与安装师傅的配置也有关系。…

支持二次开发的在线客服系统-高性能客服程序源码

首先&#xff0c;咱们这个客服系统是用 Go 语言开发的&#xff0c;Go 语言是 Google 大佬们搞出来的&#xff0c;它特别适合写并发程序&#xff0c;性能杠杠的。 如果你想改前端页面&#xff1a; 咱们的前端页面是用 HTML、CSS、JavaScript 这些传统技术做的&#xff0c;不是…

第一章 NoSQL之Redis配置与优化

关系数据库与非关系型数据库 关系型数据库 一个结构化的数据库&#xff0c;创建在关系模型基础上一般面向于记录包括Oracle、MySQL、SQLServer、Microsoft Access、DB2等 非关系型数据库 除了主流的关系型数据库外的数据库&#xff0c;都认为是非关系型包括Redis、MongoDB、…

【QML】Qt.rgba()的正确使用方法

1. 问题 设置颜色 color: Qt.rgba(65,105,225,255) &#xff0c;应该是蓝色&#xff0c;却显示白色。 2. 正确方法 //正确代码 color: Qt.rgba(65/255, 105/255, 225/255, 255/255)

如何在 K8s 中实现指定数据库实例下线?

上期文章介绍了 InstanceSet&#xff0c;同时也介绍了 InstanceSet 针对数据库高可用等需求衍生出的一系列特性。本期我们将介绍 指定实例下线 这一特性&#xff0c;一起来了解这一特性诞生的背景和使用方式吧&#xff5e; 指定实例下线解决了什么问题&#xff1f; 早期版本中…

Cisco ACL 中的通配符掩码详解

注&#xff1a;机翻&#xff0c;未校。 Wildcard Masks in ACLs Explained This tutorial explains what the ACL wildcard masks are and how they are used. Learn the differences and similarities between wildcard masks and subnet masks. 本教程介绍了什么是 ACL 通配…

HTML学习笔记——用HTML记录学习过程4——非主体结构元素

非主体结构元素主要是为了表达逻辑结构或者附加信息的元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>非主体结构元素</title> </head> <body> <header><h1>head…