浅谈shell数组的定义及循环

浅谈shell数组的定义及循环

在Shell脚本中,数组是一个非常有用的概念,可以帮助我们更好地组织和管理数据。本文将介绍Shell数组的定义及循环操作。

定义一个数组

Shell支持两种类型的数组:普通数组和关联数组。普通数组只保存数值,而关联数组包含键值对。

定义一个普通数组,需要使用以下语法:

array_name=(value1 value2 value3 ... valueN)

其中array_name是数组的名称,value1valueN是数组中的元素。

例如:

fruit=(apple banana kiwi)

这种定义的方式将会创建一个包含三个元素的数组,数组名为fruit,元素分别为applebananakiwi

要定义一个关联数组,可以使用以下语法:

declare -A array_name

然后我们可以设置数组的键值对:

array_name[key1]=value1
array_name[key2]=value2
# ...
array_name[keyN]=valueN

例如:

declare -A pet
pet["name"]="Tom"
pet["type"]="cat"
pet["color"]="white"

这种定义的方式将会创建一个包含三个键值对的关联数组,数组名为pet,键为nametypecolor,对应的值分别为Tomcatwhite

访问数组元素

要访问数组中的元素,可以使用以下语法:

${array_name[index]}

例如:

echo ${fruit[0]}   # 输出apple
echo ${pet["name"]}  # 输出Tom

循环数组

我们可以使用循环语句来遍历数组中的元素,以下是示例循环的方式。

循环普通数组

使用for循环来遍历普通数组:

fruit=(apple banana kiwi)
for i in ${fruit[@]}; do
    echo $i
done

这个例子中,${fruit[@]}会展开为apple banana kiwi三个元素,然后我们使用for循环遍历每个元素并打印到屏幕上。

循环关联数组

使用for循环的方式遍历关联数组,需要使用key-value顺序的方式获取数组的值:

declare -A pet
pet["name"]="Tom"
pet["type"]="cat"
pet["color"]="white"

for key in ${!pet[@]}; do
    echo "key: $key, value: ${pet["$key"]}"
done

这个例子中,${!pet[@]}会展开为name type color三个键,然后我们使用for循环遍历每个键,通过${pet["$key"]}获取对应的值。

示例说明

示例1

定义一个普通数组nums,元素为10个随机数,然后遍历数组并输出:

#!/bin/bash
nums=($(shuf -i 1-100 -n 10))
for i in ${nums[@]}; do
    echo $i
done

这个脚本中,我们使用了shuf命令来生成10个随机数,保存在nums数组中,然后使用for循环来遍历每个元素。

示例输出:

92
13
83
61
53
18
17
41
97
23

示例2

定义一个关联数组prices,键为苹果、香蕉、饼干、水果,值分别为4、5、2、8,然后使用for循环输出所有元素。

#!/bin/bash
declare -A prices
prices["apple"]=4
prices["banana"]=5
prices["cookie"]=2
prices["watermelon"]=8

for key in ${!prices[@]}; do
    echo "product: $key, price: ${prices["$key"]}"
done

这个脚本中,我们使用declare命令定义了一个关联数组prices,然后使用for循环遍历每个键,并输出对应的值。

示例输出:

product: watermelon, price: 8
product: cookie, price: 2
product: apple, price: 4
product: banana, price: 5

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈shell数组的定义及循环 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Android OpenGL入门之GLSurfaceView

    Android OpenGL入门之GLSurfaceView攻略 简介 GLSurfaceView是Android平台上用于显示OpenGL图形的视图组件。它提供了一个方便的方式来创建和管理OpenGL上下文,并处理与绘制相关的任务。本攻略将详细介绍如何使用GLSurfaceView来入门Android OpenGL编程。 步骤 步骤一:创建GLSurfac…

    other 2023年8月3日
    00
  • Linux Shell脚本系列教程(四):使用函数添加环境变量

    首先,我们需要了解什么是Linux Shell函数以及如何使用它们。函数是Linux Shell编程中的一种语言结构,具有独立性和封装性,可以重复调用。函数可以将一组指令封装在一起,通过函数名来调用该组指令。在编写脚本时,使用函数可以简化代码,并提高代码的复用性。下面,我们将介绍如何使用函数来添加环境变量。 定义函数 定义函数的格式为: function_n…

    other 2023年6月27日
    00
  • PyTorch如何修改为自定义节点

    PyTorch是一个非常流行的深度学习框架,支持自定义节点的修改。下面详细讲解一下如何修改PyTorch为自定义节点的完整攻略。 1.继承torch.autograd.Function 如果想要自定义节点,我们需要继承torch.autograd.Function,并实现forward和backward函数。以下是一个自定义Sigmoid节点的示例,被称为M…

    other 2023年6月25日
    00
  • QQ 8.3新第二个维护版(8.3.18033)下载:兼容Win10预览版

    QQ 8.3新第二个维护版(8.3.18033)下载:兼容Win10预览版攻略 QQ是一款广泛使用的即时通讯软件,它提供了丰富的功能和便捷的沟通方式。如果你想下载QQ 8.3新第二个维护版(8.3.18033)并在Win10预览版上使用,下面是详细的攻略。 步骤一:访问QQ官方网站 首先,你需要访问QQ官方网站以获取最新版本的QQ软件。你可以在浏览器中输入h…

    other 2023年8月3日
    00
  • Win10右键菜单添加默认应用程序设置页面详细步骤

    下面是如何添加默认应用程序设置页面到Win10右键菜单的完整攻略: 步骤一:创建注册表文件 首先,我们需要创建一个注册表文件,该文件将告诉Windows如何在右键菜单中添加一个新项。以下是注册表文件的内容: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background…

    other 2023年6月25日
    00
  • epuborultimate(优秀的电子书格式转换工具)

    以下是关于Epubor Ultimate的完整攻略,包括基本知识和两个示例。 基本知识 Epubor Ultimate是一款优秀的电子书格式转换工具,可以将各种电子书格式转换为其他格式,如EPUB、PDF、MOBI、AZW3等。它支持批量转换,可以将多个电子书文件一次性转换所需格式。此外,Epubor Ultimate还具有解除DRM功能,可以帮助用户去除电…

    other 2023年5月7日
    00
  • 浅谈PostgreSQL中大小写不敏感问题

    浅谈PostgreSQL中大小写不敏感问题 在PostgreSQL中,默认情况下,标识符(如表名、列名、函数名等)是大小写不敏感的。这意味着,无论你使用大写、小写或混合大小写的标识符,PostgreSQL都会将其视为相同的对象。然而,有时候我们需要在数据库中进行大小写敏感的操作。本攻略将详细介绍如何在PostgreSQL中处理大小写敏感的问题。 1. 区分大…

    other 2023年8月16日
    00
  • windows7系统优化技巧减小内存占用实战经验分享

    Windows 7 系统优化技巧减小内存占用实战经验分享 Windows 7 是一款广泛使用的操作系统,但在长时间使用后,可能会出现内存占用过高的问题。本攻略将介绍一些实用的技巧,帮助你减小 Windows 7 系统的内存占用,提升系统性能。 1. 禁用不必要的启动项 启动项是在系统启动时自动加载的程序或服务。禁用不必要的启动项可以减少系统启动时的内存占用。…

    other 2023年8月1日
    00
合作推广
合作推广
分享本页
返回顶部