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

让我给您详细讲解一下“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日

相关文章

  • Centos7 [ubuntu] 安装pycharm2019.1.3并永久破解教程

    Centos7 [ubuntu] 安装PyCharm 2019.1.3并永久破解教程 1. 确认系统版本 在开始安装PyCharm之前,请确保你的CentOS7或Ubuntu系统已经安装了Java SDK,并且已经进行了基本的系统更新。输入以下命令检查Java SDK是否安装成功: java -version 如果Java SDK已经安装,命令行会输出Jav…

    其他 2023年3月28日
    00
  • R语言中的vector(向量),array(数组)使用总结

    接下来我将介绍一下“R语言中的vector(向量),array(数组)使用总结”,主要包括以下几个部分: 向量(vector)的定义和使用 数组(array)的定义和使用 示例说明 1. 向量(vector)的定义和使用 向量是R语言中最基本的数据结构之一,它的定义方式很简单,只需要用c()函数把多个元素组合在一起即可,如下所示: # 定义一个向量 v &l…

    other 2023年6月25日
    00
  • 企业一体化网络管理、网络运维管理和数据防泄露系统方案

    企业一体化网络管理、网络运维管理和数据防泄露系统方案攻略 企业一体化网络管理、网络运维管理和数据防泄露系统方案旨在解决企业网络管理、维护和安全问题,提高企业的网络可靠性和安全性。以下是一份完整的攻略,详细介绍如何实现企业一体化网络管理、网络运维管理和数据防泄露系统方案。 第一步:需求分析 首先,需要对企业现有的网络架构、业务需求、网络安全保障和运维管理要求等…

    other 2023年6月27日
    00
  • Java中缀表达式转后缀表达式流程详解

    Java中缀表达式转后缀表达式流程详解 在Java中,我们可以使用栈来将中缀表达式转换为后缀表达式。下面是详细的转换过程: 创建一个空栈和一个空字符串,用于存储后缀表达式。 从左到右遍历中缀表达式的每个字符。 如果当前字符是操作数(数字或变量),则将其添加到后缀表达式字符串中。 如果当前字符是左括号\”(\”,则将其压入栈中。 如果当前字符是右括号\”)\”…

    other 2023年8月5日
    00
  • 6.(转载)SSRF漏洞挖掘经验

    6. (转载) SSRF漏洞挖掘经验 本文将分享一些SSRF漏洞挖掘的经验和技巧。SSRF漏洞是一种在Web应用中广泛存在的安全漏洞,攻击者可以利用它来发起内网扫描、攻击内部系统等。 什么是SSRF漏洞? SSRF全称Server-Side Request Forgery(服务端请求伪造)漏洞,简单来说,就是Web应用程序中的一个安全漏洞,攻击者可以利用它来…

    其他 2023年3月28日
    00
  • 详解浏览器渲染页面过程

    详解浏览器渲染页面过程的完整攻略 1. 解析HTML 当浏览器接收到HTML文档时,它会开始解析该文档。解析过程包括以下几个步骤: 词法分析:将HTML文档分解为一系列的标记(tokens),如标签、属性和文本内容。 语法分析:根据HTML规范,将标记组织成一个树状结构,即DOM树(Document Object Model)。 2. 构建DOM树 DOM树…

    other 2023年9月7日
    00
  • macos-mac中的mkdir-p

    当然,我很乐意为您提供关于“macOS中的mkdir -p命令”的完整攻略。以下是详细的步骤说明: 步骤说明 mkdirp命令是在macOS终端中创建目录的命令。它可以创建多个目录,即使其中的某些目录不存在。以下使用mkdir -p命令创建目录的详细步骤: 打开终端。在macOS中,您可以通过在“应用程序文件夹中找到“终端”应用程序来打开终端。 输入以下命令…

    other 2023年5月9日
    00
  • catia软件怎么绘制画弹簧模型?

    下面我来详细讲解一下“catia软件怎么绘制画弹簧模型”这个问题的攻略。 步骤一:创建草图 首先,我们需要创建一个草图,用于基础的绘画。 打开Catia软件,选择“零件”模式。 点击“草图”图标,创建一个新草图。 根据实际需要设置草图的坐标系和平面。 在草图平面上,绘制出弹簧的轮廓线。 步骤二:绘制剖面 在完成草图的绘制后,我们需要绘制弹簧截面。这是绘制弹簧…

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