当前位置: 首页 > news >正文

Linux Shell编程--数组

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

一、简介

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

二、声明数组

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

 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

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

 declare -a array_namearray_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开始。

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

四、遍历数组

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

 for element in "${array_name[@]}"; doecho $elementdone

五、获取数组长度

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

 length=${#array_name[@]}echo "Array length is $length"

六、多维数组

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

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

七、常用数组操作

1、添加元素

 array_name+=("new_element")

2、删除元素

 unset array_name[index]

3、反转数组

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

4、查找元素

 index=0for element in "${array_name[@]}"; doif [ "$element" == "search_element" ]; thenecho "Found at index $index"breakfi((index++))done

5、排序数组

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

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

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

示例

 # 声明并初始化数组my_array=("apple" "banana" "cherry")​# 输出数组元素for i in "${!my_array[@]}"; doecho "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[@]}"; doecho "${reverse_array[$((${#reverse_array[@]} - 1 - i))]}"done​# 查找元素index=0for element in "${my_array[@]}"; doif [ "$element" == "banana" ]; thenecho "Banana found at index $index"breakfi((index++))done​# 排序数组sorted_array=( $(sort <<<"${my_array[*]}") )echo "Sorted array: ${sorted_array[@]}"

注意事项

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

总结

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

致谢

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux服务管理(五)Apache服务优化
  • 贷齐乐hpp+php特性注入
  • Gerrit 使用教程
  • C++ | stack/queue
  • 【安卓】Service的基本用法
  • 排序算法【希尔排序】
  • python识别车辆标志
  • 前端开发攻略---图片裁剪上传的原理
  • Hackademic.RTB1靶场实战【超详细】
  • S71200 - 编程 - 笔记
  • ZooKeeper 集群的详细部署
  • eNSP 华为三层交换机实现VLAN间通信
  • 【课程总结】day23:大模型训练策略(BERT模型与GLM模型)
  • 【若依 - 前后端不分离版】SysCaptchaController 详解:生成与处理验证码
  • springboot2.x到spring3.x的一些变化和示例说明
  • SegmentFault for Android 3.0 发布
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【技术性】Search知识
  • const let
  • css布局,左右固定中间自适应实现
  • ESLint简单操作
  • HTTP那些事
  • Java,console输出实时的转向GUI textbox
  • JavaWeb(学习笔记二)
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS字符串转数字方法总结
  • MySQL主从复制读写分离及奇怪的问题
  • rc-form之最单纯情况
  • 工作中总结前端开发流程--vue项目
  • 后端_MYSQL
  • 七牛云假注销小指南
  • 人脸识别最新开发经验demo
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 学习笔记:对象,原型和继承(1)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​虚拟化系列介绍(十)
  • # 透过事物看本质的能力怎么培养?
  • #if和#ifdef区别
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (9)STL算法之逆转旋转
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (超详细)语音信号处理之特征提取
  • (二)换源+apt-get基础配置+搜狗拼音
  • (一)Docker基本介绍
  • (一)认识微服务
  • ./configure,make,make install的作用(转)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET C# 使用 iText 生成PDF
  • .NET 分布式技术比较