浅谈shell数组的定义及循环

yizhihongxing

浅谈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日

相关文章

  • 魔兽世界6.2双持冰DK输出优先级及属性BIS选择攻略分享

    魔兽世界6.2双持冰DK输出优先级及属性BIS选择攻略分享 1. 介绍 本攻略旨在分享魔兽世界版本6.2中双持冰死亡骑士的输出优先级和属性BIS选择。通过正确的优先级和合适的属性选择,你可以最大化你的输出能力,并在战斗中发挥更大的作用。 2. 输出优先级 在进行输出时,双持冰死亡骑士需要按照以下优先级进行技能施放: 符文能力死命打击 死命打击是最主要的技能,…

    other 2023年6月28日
    00
  • stm32按键识别

    stm32按键识别 在嵌入式系统中,按键是我们经常使用的输入设备。在STM32系列的微控制器中,IO口的使用比较灵活,可以通过编程实现按键识别功能。本篇文章将介绍如何使用STM32的外部中断和IO口输入模式实现按键识别功能。 硬件准备 使用STM32实现按键识别功能需要一些硬件准备,包括一个按键,一个电阻和对应的STM32开发板。这里以STM32F103C8…

    其他 2023年3月28日
    00
  • UDP简单服务端客户端代码示例

    UDP简单服务端客户端代码示例分为两个部分:服务端和客户端。服务端基于UDP协议收发数据,客户端向服务端发送数据并接收服务端的响应。下面详细讲解编写UDP简单服务端客户端代码的步骤。 编写UDP服务端代码 创建UDP Socket import socket server_socket = socket.socket(socket.AF_INET, sock…

    other 2023年6月27日
    00
  • @ConfigurationProperties绑定配置信息至Array、List、Map、Bean的实现

    @ConfigurationProperties 是 Spring Boot 中的一个注解,它允许我们将应用程序中的配置文件绑定到 Bean 上。绑定后,我们就可以方便地将配置文件的配置值注入到 Bean 中了。除了一个普通的扩展 @ConfigurationProperties 的 Spring Boot Config 类之外,我们还可以将属性绑定到 Co…

    other 2023年6月25日
    00
  • linux系统挂载以及卸载USB接口的设备的解决办法

    Linux系统挂载以及卸载USB接口的设备可以通过以下步骤完成: 1. 查看设备状态 首先需要查看USB设备的状态,可以使用以下命令: $ lsusb 该命令可以列出当前连接到计算机上的所有USB设备,以及对应的Vendor ID和Product ID等信息。如果设备正常连接,则会显示设备的详细信息。 2. 挂载设备 挂载USB设备需要先创建一个挂载点,通常…

    other 2023年6月27日
    00
  • 关于MVC EF架构及Repository模式的一点心得

    关于MVC EF架构及Repository模式的一点心得的完整攻略 本文将为您提供关于MVC EF架构及Repository模式的一点心得的完整攻略,包括介绍、使用方法和两个示例说明。 介绍 MVC EF架构是一种常用的Web应用程序开发架构,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。而Repositor…

    other 2023年5月6日
    00
  • Go语言的结构体还能这么用?看这篇就够了

    让我来给你详细讲解一下“Go语言的结构体还能这么用?看这篇就够了”的完整攻略。 1. 简介 Go语言的结构体是一种自定义数据类型,它可以包含各种不同类型的数据,如数字、字符串、布尔值等。除此之外,结构体还可以嵌套、匿名等等,使其更加灵活多变。在本篇攻略中,我们将探讨结构体的一些高级用法,让你更好地掌握它。 2. 结构体的嵌入 2.1 基本用法 结构体的嵌入是…

    other 2023年6月27日
    00
  • 解析获取优酷视频真实下载地址的PHP源代码

    解析获取优酷视频真实下载地址的PHP源代码攻略 简介 优酷视频是中国最大的视频分享网站之一,它提供了丰富的视频内容。然而,优酷视频并不直接提供下载功能,因此我们需要通过解析获取其真实下载地址。本攻略将介绍如何使用PHP编写代码来解析获取优酷视频的真实下载地址。 步骤 步骤一:获取视频ID 首先,我们需要获取要下载的优酷视频的ID。可以通过优酷视频的URL来获…

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