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

shell脚本编程(数组)

目录

一.数组定义

1.1基本概念

2.1定义数组

二.访问数组元素

2.1基础访问

2.2获取数组的所有元素

2.3获取数组的长度

2.4数组的切片

2.5数组的遍历

三.示例脚本


一.数组定义

1.1基本概念

在Shell脚本中,数组是一种用于存储多个值的数据结构。Shell支持一维数组,可以通过索引来访问数组中的元素。

shell中数组可大致分为两类:

1.普通数组:只能用整数作为数组的索引

2.关联数组:可以使用字符串作为数组的索引

2.1定义数组

在Shell中,可以通过以下方式声明和初始化一个数组:

# 声明并初始化数组
array_name=(value1 value2 value3 ... valueN)

例如:

fruits=("Apple" "Banana" "Cherry" "Date")

 关联数组需要提前声明

declare -A myarry1
[root@localhost]# declare -A myarry1
[root@localhost]# myarry1=([name]=newrain [sex]=man [age]=26) 
[root@localhost]# echo ${myarry1[name]}
newrain

二.访问数组元素

2.1基础访问

可以通过索引来访问数组中的元素,索引从0开始:

echo ${array_name[0]}  # 输出第一个元素
echo ${array_name[1]}  # 输出第二个元素

2.2获取数组的所有元素

可以使用@*来获取数组中的所有元素:

echo ${array_name[@]}  # 输出所有元素
echo ${array_name[*]}  # 输出所有元素

关于在shell脚本中数组变量中 “*”跟 “@” 区别
*当变量加上“” 会当成一串字符串处理. 
@变量加上“” 依然当做数组处理. 
在没有加上“” 的情况下 效果是等效的.

2.3获取数组的长度

可以使用#来获取数组的长度:

echo ${#array_name[@]}  # 输出数组的长度
echo ${#array_name[*]}  # 输出数组的长度

2.4数组的切片

可以对数组进行切片操作,获取部分元素:

echo ${array_name[@]:1:2}  # 从索引1开始,获取2个元素

2.5数组的遍历

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

遍历数组while
[root@localhost]# cat array01.sh 
#!/bin/bash
#++ i 是先自加1后赋值;i ++ 是先赋值后自加1。 
while read line
do     host[i++]=$line  # 观察i++ 和 ++i的区别
done </etc/hosts
for i in ${!host[@]}   # 数组的元素索引
doecho "$i:${host[i]}"
done遍历数组for
[root@localhost]# cat array02.sh 
#!/bin/bash
IFS=''
for line in `cat /etc/hosts`  # 读取文件中的每一行
dohost[j++]=$line
done
for i in ${!host[@]}
doecho ${host[i]}
done 

三.示例脚本

以下是一个完整的示例脚本,展示了如何声明、初始化、访问和遍历数组:

#!/bin/bash# 声明并初始化数组
fruits=("Apple" "Banana" "Cherry" "Date")# 访问数组元素
echo "第一个水果是: ${fruits[0]}"
echo "第二个水果是: ${fruits[1]}"# 获取数组的所有元素
echo "所有水果: ${fruits[@]}"# 获取数组的长度
echo "水果的数量: ${#fruits[@]}"# 数组的切片
echo "从第二个开始取两个水果: ${fruits[@]:1:2}"# 遍历数组
echo "遍历所有水果:"
for fruit in "${fruits[@]}"; doecho $fruit
done

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 智能家居系统(基于STM32F103C8T6标准库+FreeRTOS+Qt串口开发实现)
  • 【系统架构设计师-2010年】综合知识-答案及详解
  • Java 7.3 - 分布式 id
  • QT教程:start()和startTimer()的区别
  • 第五章 Pytorch完成线性回归
  • 小白入门LLM大模型最牛X教程------上交《动手学大模型应用开发》!
  • 语音测试(一)ffmpeg视频转音频
  • 2024年全国大学生数学建模竞赛(A题) 建模解析|“板凳龙” 闹元宵|小鹿学长带队指引全代码文章与思路
  • OpenHarmony轻松玩转GIF数据渲染
  • 语言的自动类型
  • QueryWrapper中的or和and
  • 磁盘加密工具 | VeraCrypt v1.26.15 绿色版
  • STM32基础篇:RTC × Unix时间戳 × BKP
  • [Deepin] 简单使用 RustDesk 实现远程访问Deepin
  • LeetCode 热题100-70 最小栈
  • JavaScript-如何实现克隆(clone)函数
  • [case10]使用RSQL实现端到端的动态查询
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【347天】每日项目总结系列085(2018.01.18)
  • Babel配置的不完全指南
  • Date型的使用
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • spring学习第二天
  • Theano - 导数
  • 闭包,sync使用细节
  • 回顾 Swift 多平台移植进度 #2
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 微服务核心架构梳理
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 译米田引理
  • 应用生命周期终极 DevOps 工具包
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • #includecmath
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (13)DroneCAN 适配器节点(一)
  • (Forward) Music Player: From UI Proposal to Code
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Ruby)Ubuntu12.04安装Rails环境
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (南京观海微电子)——示波器使用介绍
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (三)mysql_MYSQL(三)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .DFS.
  • .NET Micro Framework初体验(二)
  • .NetCore 如何动态路由
  • @ohos.systemParameterEnhance系统参数接口调用:控制设备硬件(执行shell命令方式)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 手记 ] 关于tomcat开机启动设置问题
  • []指针
  • [20170728]oracle保留字.txt