Linux Shell脚本系列教程(六):数组和关联数组

yizhihongxing

让我给您详细讲解一下“Linux Shell脚本系列教程(六):数组和关联数组”的完整攻略。

一、数组

1. 数组的定义

定义数组的方式有两种:

  • 类似于C语言的定义方式:array_name=(value1 value2 value3 ...)
  • 类似于Python的定义方式:array_name=([0]=value1 [1]=value2 [2]=value3 ...)

注:数组元素的下标从0开始。

2. 数组的使用

2.1 访问数组元素

访问数组元素的方式是:${array_name[index]}

例如,如果我们定义了一个数组:

my_array=(apple banana peach orange)

想要访问第二个元素“banana”,可以这样写:

echo ${my_array[1]}

输出结果:

banana

2.2 获取数组长度

获取数组长度的方式是:${#array_name[@]}

例如,如果我们定义了一个数组:

my_array=(apple banana peach orange)

想要获取该数组长度,可以这样写:

echo ${#my_array[@]}

输出结果:

4

3. 数组的遍历

3.1 循环遍历数组元素

使用for循环遍历数组:

for item in ${my_array[@]}; do
  echo $item
done

输出结果:

apple
banana
peach
orange

3.2 获取数组元素和下标

使用for循环遍历数组,并输出元素和其下标:

for i in ${!my_array[@]}; do
  echo "Index:$i Value:${my_array[i]}"
done

输出结果:

Index:0 Value:apple
Index:1 Value:banana
Index:2 Value:peach
Index:3 Value:orange

4. 数组的拼接

使用“+”号将两个数组进行拼接:

array1=(apple banana)
array2=(peach orange)
array3=(${array1[@]} ${array2[@]})
echo ${array3[@]}

输出结果:

apple banana peach orange

5. 数组的切片

使用“:”号可以截取数组的一部分:

myarray=(apple banana peach orange)
echo ${myarray[@]:1:2}

输出结果:

banana peach

二、关联数组

关联数组是一种键值对的数组。

1. 关联数组的定义

定义关联数组的方式为:declare -A array_name;给数组元素赋值的方式为:array_name[key]=value

例如:

declare -A  my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30

2. 关联数组的使用

2.1 访问数组元素

访问关联数组元素的方式是:${array_name[key]}

例如,如果我们定义了一个关联数组:

declare -A my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30

想要访问“banana”的值,可以这样写:

echo ${my_array["banana"]}

输出结果:

20

2.2 获取关联数组键值数

获取关联数组键值数的方式是:${#array_name[@]}

例如,如果我们定义了一个关联数组:

declare -A my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30

想要获取该数组键值数,可以这样写:

echo ${#my_array[@]}

输出结果:

3

3. 关联数组的遍历

3.1 循环遍历关联数组元素的key和value

使用for循环遍历关联数组,并输出key和value:

for key in ${!my_array[@]}; do
  echo "Key:$key Value:${my_array[$key]}"
done

输出结果:

Key:apple Value:10
Key:banana Value:20
Key:orange Value:30

4. 关联数组的拼接

关联数组不支持直接拼接,需要使用其他方法实现。

例如,将两个关联数组拼接成一个新的关联数组:

declare -A my_array1
my_array1["apple"]=10
my_array1["banana"]=20

declare -A my_array2
my_array2["peach"]=30
my_array2["orange"]=40

for key in ${!my_array1[@]}; do
  my_array3[$key]=${my_array1[$key]}
done

for key in ${!my_array2[@]}; do
  my_array3[$key]=${my_array2[$key]}
done

for key in ${!my_array3[@]}; do
  echo "Key:$key Value:${my_array3[$key]}"
done

输出结果:

Key:apple Value:10
Key:banana Value:20
Key:peach Value:30
Key:orange Value:40

示例说明

示例一

需求:定义一个数组scores来保存4名学生的成绩,然后输出每个学生的成绩。

# 定义一个成绩数组
scores=(98 87 77 66)

# 遍历数组
for score in ${scores[@]}; do
  echo $score
done

输出结果:

98
87
77
66

示例二

需求:定义一个关联数组scorelevel,保存各个分数段的等级。

declare -A scorelevel
scorelevel["90"]="A"
scorelevel["80"]="B"
scorelevel["70"]="C"
scorelevel["60"]="D"
scorelevel["0"]="F"

score=87

for key in ${!scorelevel[@]}; do
  if [ $score -ge $key ]; then
    echo "Score:$score Grade:${scorelevel[$key]}"
    break
  fi
done

输出结果:

Score:87 Grade:B

以上就是关于“Linux Shell脚本系列教程(六):数组和关联数组”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux Shell脚本系列教程(六):数组和关联数组 - Python技术站

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

相关文章

  • Springboot事件和bean生命周期执行机制实例详解

    Springboot事件和Bean生命周期执行机制实例详解 介绍 在Springboot框架中,事件和bean生命周期是非常重要的概念,对于开发者来说也是必须掌握的技能。本文将详细讲解Springboot事件和bean生命周期的执行机制,以及通过示例说明如何使用。 Springboot事件 Springboot事件是在应用程序中发生的事情。事件可以是正常的服…

    other 2023年6月27日
    00
  • TCP长连接实践与挑战

    TCP长连接实践与挑战的完整攻略 TCP长连接是指在一次TCP连接中,客户端和服务器之间可以进行多次数据传输,而不是在每次数据传输后就关闭连接。这种连接方式可以减少连接建立和断开的开销,提高网络传输效率。本文将为您提供TCP长连接实与挑战的完整攻略,包括长连接的优缺点、实现方式、心跳机制、断线重连等。 长连接的优缺点 TCP长连接的优点包括: 减少连接建立和…

    other 2023年5月6日
    00
  • 火影忍者究极风暴4缺少msvcp120.dll问题的解决方法

    标题:解决“火影忍者究极风暴4缺少msvcp120.dll问题”的完整攻略 问题描述 在运行“火影忍者究极风暴4”游戏时,可能会遇到缺少msvcp120.dll 文件的错误提示,导致游戏无法正常启动。这是因为游戏所需的Microsoft Visual C++ Redistributable运行库缺失或不完整造成的。 解决方法 方法1:安装C++运行库 打开M…

    other 2023年6月27日
    00
  • ibmappscan基本操作手册

    IBM AppScan 基本操作手册 IBM AppScan是一款用于Web应用程序安全性检测的工具。其通过模拟攻击方法和技术,对Web应用程序进行扫描并报告潜在的安全漏洞。本文将介绍IBM AppScan的基本操作步骤。 下载 IBM AppScan 首先,从IBM官网下载并安装IBM AppScan。安装完成后,打开IBM AppScan。 创建新扫描 …

    其他 2023年3月29日
    00
  • 腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口

    腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口攻略 1. 腾讯地图IP定位接口 腾讯地图提供了通过IP地址获取当前地理位置(省份)的接口。以下是使用该接口的攻略: 请求URL https://apis.map.qq.com/ws/location/v1/ip 请求参数 参数名 类型 必填 描述 key string 是 腾讯地图开发者密钥 ip st…

    other 2023年7月30日
    00
  • BAT文件语法和技巧(bat文件的编写及使用)

    BAT文件语法和技巧 简介 BAT文件是Windows下的可执行脚本文件,全称为“批处理文件”。它可以由Windows的命令提示符解释执行。由于其具有批量和自动化处理的特性,使得BAT文件在Windows上有着广泛的应用。 在BAT文件中,用户可以使用命令和控制结构来编写一系列自动化的操作,从而避免了手动执行冗长的操作。BAT文件的基本语法和技巧可能对初学者…

    other 2023年6月26日
    00
  • 在 Vue 中使用 iframe 嵌套页面的步骤

    当在Vue中使用iframe嵌套页面时,可以按照以下步骤进行操作: 在Vue组件中添加iframe元素:在Vue组件的模板中,使用<iframe>标签添加一个iframe元素。可以通过设置src属性来指定要嵌套的页面的URL。 示例代码: <template> <div> <h1>主页面</h1> …

    other 2023年7月27日
    00
  • vue不用import直接调用实现接口api文件封装

    Vue.js 是一种非常流行的前端框架,它使用了组件化的开发模式,可以极大地提高开发效率、代码质量、可维护性等方面的表现。在大型项目中,后端接口的封装是一个比较常见的问题。而在 Vue.js 中,可以使用 ES6 的模块化机制,在 Vue.js 的组件化开发模式下,非常便捷地实现后端接口封装。 下面,就介绍如何在 Vue.js 项目中实现“不用 import…

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