【linux】shell(38)-数组

Shell脚本中的数组是一个非常有用的数据结构,可以存储多个值。与其他编程语言不同,Shell脚本中的数组是弱类型的,这意味着它们可以存储不同类型的数据。

1. 数组的定义

在Shell脚本中,数组可以通过以下方式定义:

bash 复制代码
# 定义一个数组
my_array=(value1 value2 value3)

# 也可以使用declare命令
declare -a my_array=("value1" "value2" "value3")

数组中的元素可以是字符串、数字或其他数据类型。数组的索引从0开始。

2. 访问数组元素

可以通过索引来访问数组中的元素:

bash 复制代码
# 访问数组中的第一个元素
echo ${my_array[0]}

# 访问数组中的第二个元素
echo ${my_array[1]}

3. 修改数组元素

可以通过索引来修改数组中的元素:

bash 复制代码
# 修改数组中的第一个元素
my_array[0]="new_value1"

# 修改数组中的第二个元素
my_array[1]="new_value2"

4. 获取数组的长度

可以使用${#array_name[@]}来获取数组的长度:

bash 复制代码
# 获取数组的长度
length=${#my_array[@]}
echo "Array length: $length"

5. 遍历数组

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

bash 复制代码
# 遍历数组中的元素
for element in "${my_array[@]}"; do
    echo $element
done

6. 添加和删除数组元素

在Shell脚本中,数组的大小是动态的,可以随时添加或删除元素。

  • 添加元素
bash 复制代码
# 添加元素到数组末尾
my_array+=("new_value4")
  • 删除元素

可以使用unset命令删除数组中的元素:

bash 复制代码
# 删除数组中的第二个元素
unset my_array[1]

7. 多维数组

Shell脚本不直接支持多维数组,但可以通过数组中的数组来模拟:

bash 复制代码
# 定义一个二维数组
declare -A matrix
matrix[0,0]=1
matrix[0,1]=2
matrix[1,0]=3
matrix[1,1]=4

# 访问二维数组中的元素
echo ${matrix[0,0]}
echo ${matrix[1,1]}

8. 关联数组

Bash 4及以上版本支持关联数组,允许使用字符串作为索引:

bash 复制代码
# 定义一个关联数组
declare -A assoc_array
assoc_array[key1]="value1"
assoc_array[key2]="value2"

# 访问关联数组中的元素
echo ${assoc_array[key1]}

9. 数组操作的高级用法

  • 数组切片

可以使用${array[@]:start:length}来获取数组的切片:

bash 复制代码
# 获取数组的切片
slice=(${my_array[@]:1:2})
echo ${slice[@]}
  • 数组排序

可以使用sort命令对数组进行排序:

bash 复制代码
# 排序数组
sorted_array=($(for i in "${my_array[@]}"; do echo $i; done | sort))
echo ${sorted_array[@]}
  • 数组去重

可以使用awk命令去除数组中的重复元素:

bash 复制代码
# 去除数组中的重复元素
unique_array=($(echo "${my_array[@]}" | tr ' ' '\n' | awk '!seen[$0]++'))
echo ${unique_array[@]}

10. 实际应用示例

以下是一个实际应用示例,展示如何使用数组来处理文件列表:

bash 复制代码
#!/bin/bash

# 定义一个数组来存储文件列表
files=("file1.txt" "file2.txt" "file3.txt")

# 遍历文件列表并检查文件是否存在
for file in "${files[@]}"; do
    if [[ -e $file ]]; then
        echo "$file exists."
    else
        echo "$file does not exist."
    fi
done

# 添加一个新文件到数组
files+=("file4.txt")

# 输出更新后的文件列表
echo "Updated file list: ${files[@]}"
相关推荐
✧北辰٩(ˊωˋ*)و南冥✧10 分钟前
nginx 负载均衡配置(加解决重复登录问题)
运维·nginx·负载均衡
慌糖11 分钟前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!21 分钟前
linux常用命令(一)
linux·运维·服务器
hnlucky28 分钟前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win37 分钟前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
笑稀了的野生俊2 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn
千帐灯无此声2 小时前
Linux 测开:日志分析 + 定位 Bug
linux·c语言·c++·bug
誰能久伴不乏2 小时前
深入了解 Vim 编辑器:从入门到精通
linux·编辑器·vim
ghie90902 小时前
在Centos系统上如何有效删除文件和目录的指令汇总
linux·运维·centos
Linux-palpitate2 小时前
Keepalived+LVS实现LNMP网站的高可用部署
linux·运维·服务器·mysql·lvs