Linux Shell编程--数组

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除!

一、简介

Shell 脚本中的数组允许你存储多个值,并可以通过索引访问它们。Shell 中的数组是一维的。

二、声明数组

在Shell中声明普通数组:只能用整数作为数组的索引 ;基本语法如下:

bash 复制代码
 array_name=(value1 value2 value3 ...)
 ​
 # 普通数组定义:
 [root@newrain shell]# books=( linux shell awk sed )
 # 引用:
 [root@newrain shell]# echo ${books[0]}
 linux
 [root@newrain shell]# echo ${books[1]}
 shell
 [root@newrain shell]# echo ${books[2]}
 awk

关联数组:可以使用字符串作为数组的索引;基本语法如下:

bash 复制代码
 declare -a array_name
 array_name=(value1 value2 value3 ...)
 ​
 # 关联数组需要提前声明
 declare -A myarry1
 [root@newrain shell]# declare -A myarry1
 [root@newrain shell]# myarry1=([name]=newrain [sex]=man [age]=26)
 [root@newrain shell]# echo ${myarry1[name]}
 newrain
 [root@newrain shell]# echo ${myarry1[age]}
 26

三、访问数组元素

使用索引来访问数组中的元素。索引从0开始。

bash 复制代码
 echo "${array_name[0]}" # 输出数组的第一个元素

四、遍历数组

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

bash 复制代码
 for element in "${array_name[@]}"; do
     echo $element
 done

五、获取数组长度

Shell中没有内置的数组长度属性,但可以通过以下方式获取:

bash 复制代码
 length=${#array_name[@]}
 echo "Array length is $length"

六、多维数组

Shell 不原生支持多维数组,但可以通过一些技巧来模拟:

bash 复制代码
 # 声明
 declare -a array_2d
 array_2d=([0]="row1col1 row1col2" [1]="row2col1 row2col2")
 ​
 # 访问
 echo "${array_2d[0]}"  # 输出 row1col1 row1col2
 echo "${array_2d[0][col_index]}"

七、常用数组操作

1、添加元素

bash 复制代码
 array_name+=("new_element")

2、删除元素

bash 复制代码
 unset array_name[index]

3、反转数组

bash 复制代码
reverse_array=("${array_name[@]}") # 创建副本
reverse_array=( $(echo "${reverse_array[@]}" | rev) )

4、查找元素

bash 复制代码
 index=0
 for element in "${array_name[@]}"; do
     if [ "$element" == "search_element" ]; then
         echo "Found at index $index"
         break
     fi
     ((index++))
 done

5、排序数组

bash 复制代码
 IFS=$'\n' # 改变内部字段分隔符
 sorted_array=( $(sort <<<"${array_name[*]}") ) # 排序
 unset IFS # 重置内部字段分隔符

八、shell数组中"*" 和 "@" 区别

bash 复制代码
 "*"当变量加上"" 会当成一串字符串处理.
 "@"变量加上"" 依然当做数组处理.
 在没有加上"" 的情况下 效果是等效的.

示例

cs 复制代码
 # 声明并初始化数组
 my_array=("apple" "banana" "cherry")
 ​
 # 输出数组元素
 for i in "${!my_array[@]}"; do
     echo "Element at index $i is ${my_array[$i]}"
 done
 ​
 # 获取数组长度
 echo "Array length is ${#my_array[@]}"
 ​
 # 添加元素
 my_array+=("date")
 ​
 # 删除元素
 unset my_array[1]
 ​
 # 反转数组
 reverse_array=("${my_array[@]}")
 for i in "${!reverse_array[@]}"; do
     echo "${reverse_array[$((${#reverse_array[@]} - 1 - i))]}"
 done
 ​
 # 查找元素
 index=0
 for element in "${my_array[@]}"; do
     if [ "$element" == "banana" ]; then
         echo "Banana found at index $index"
         break
     fi
     ((index++))
 done
 ​
 # 排序数组
 sorted_array=( $(sort <<<"${my_array[*]}") )
 echo "Sorted array: ${sorted_array[@]}"

注意事项

  • 数组元素中的空格需要用双引号括起来,以避免被拆分。
  • 索引操作和遍历时要注意引号的使用,以确保字符串被正确处理。
  • 由于Shell的限制,数组操作可能不如其他编程语言直观。

总结

Shell中的数组虽然功能有限,但通过一些技巧和方法,仍然可以有效地进行数组操作和处理。

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

相关推荐
L02082410 小时前
Kubernetes Ingress|CNI 网络模型|Calico 网络策略|Pod 调度器完整实战教程
运维·网络·云原生·容器·kubernetes
考拉讲支付11 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
ADAI_Bowen12 小时前
写文章 - 知乎
大数据·运维·人工智能
GeW12 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux
云宏信息13 小时前
超融合和存算分离怎么选?从性能、可靠性、扩展、成本四个维度讲述如何精准匹配架构选型 | 附企业降本轻量云方案
运维·服务器·架构·云计算
mounter62513 小时前
深入理解 gccrs:GCC 如何实现 Rust 编译器,以及编译 Linux 内核面临的挑战
linux·驱动开发·rust
垚垚学技术_聚焦云原生13 小时前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
无足鸟ICT14 小时前
【RHCA+】type命令(判断命令类型)
linux·ssh·bash
咸鱼梦想家π14 小时前
Linux开发工具(下)
linux·运维·服务器
LHICOD14 小时前
Linux-1
linux·ip·vmware·虚拟机·cmd·ping