【Shell 脚本速成】06、Shell 数组详解

news2025/1/23 13:13:15

目录

一、数组介绍

二、数组定义

三、数组赋值方式

四、数组取值

案例演示

五、关联数组

5.1 定义管理数组

5.2 关联数组赋值

5.3 管理数组取值

5.4 综合案例 


 

        有这样一个现实问题:一个班级学员信息系统,要求存储学员ID、NAME、SCORE、AGE、GENDER,班级有50个人,思考如何解决交互中数据存储的问题。很多人可能直接说或定义变量接收数据不就行了!nice,你很棒!!

解决方案如下:

1)每个学生通过5个变量,一个班级50个学生,5*50=250,妥妥的!我定义250个变量接收就可以了,美美哒!

        兄弟,现在不是全班了是全校的学生需要录入你这个信息系统,你写变量吧!!当我提出这个需求的时候,作为开发你会不会想骂娘呢?

2)使用数组来定义,我只需要定义5个数组来接收所有用户的数据就可以了,5个数组就能解决一切,你觉得你会不会想了解下数组是什么呢?

一、数组介绍

数组可以让用户一次赋予多个值,需要读取数据时只需通过索引调用就可以方便读出了。

  • 普通数组:只能使用整数作为数组索引(元素的索引)
  • 关联数组:可以使用字符串作为数组索引(元素的索引)

二、数组定义

数组名称=(元素1 元素2 元素3 ...)

三、数组赋值方式

  • 一次附一个值
变量名(数组名称)=变量值
array[0]=v1
array[1]=v2
array[3]=v3
  • 一次附多个值
array=(var1 var2 var3 var4)
array1=(`cat /etc/passwd`)			// 将 passwd 文件中每一行赋值给array1数组
array2=(`ls /root`)
array3=(harry amy jack "Miss zhang")
array4=(1 2 3 4 "hello world" [10]=linux)
  • 案例演示
# 一次赋予多个值
array1=(a b c d e f g)

# 分别赋值
array2[0]=1
array2[1]=2
array2[10]=11

# 命令的执行结果赋值
array3=(`cat /etc/passwd`)

# 个性化diy赋值
array4=(1 2 3 "hello world" [8]="haha")

四、数组取值

取值方式: ${数组名称[索引]}

索引: 默认情况下索引是指数组中的元素[存的值]在数组中的顺序,从0开始计数,关联数组除外。

比如:
array=(var1 var2 var3 var4)
array数组中存有4个元素,分别是:var1 var2 var3 var4
那么我想取出var2这个元素,那么就得先看看他在数组中的位置,数组中的元素索引如下:

		元素	var1 var2 var3 var4
		索引	 0    1    2    3

所以正确表示array数组中元素var2的方式是:${array[1]}

数组取值的多种方式:

${array[i]}             i表示元素的索引
使用 @ 或 * 可以获取数组中的所有元素:

echo ${array[0]}        获取第一个元素
echo ${array[*]}	    获取数组里的所有元素
echo ${#array[*]}		获取数组里所有元素个数
echo ${!array[@]}    	获取数组元素的索引
echo ${array[@]:1:2}    获取指定的元素范围。1代表从索引为1的元素开始获取;2代表获取1索引及其后面的元素总共2个元素

案例演示

[root@shell ~]# vi array_test.sh
#!/bin/bash

# 一次赋予多个值
array1=(a b c d e f g)

# 分别赋值
array2[0]=1
array2[1]=2
array2[10]=11

# 命令的执行结果赋值
array3=(`cat /etc/passwd`)

# 个性化diy赋值
array4=(1 2 3 "hello world" [8]="haha")

# 取值	${数组名[索引]}
echo ${array1[2]}
echo ${array2[1]}
echo ${array3[0]}
echo ${array4[8]}

# 获取array2中的所有元素
echo ${array2[*]}

# 获取array2中所有元素个数
echo ${#array2[*]}

# 获取array2数组元素的索引
echo ${!array2[@]}

# 获取指定的元素范围
echo ${array1[*]:2:3}

[root@shell ~]# sh array_test.sh 
c
2
root:x:0:0:root:/root:/bin/bash
haha
1 2 11
3
0 1 10
c d e

五、关联数组

5.1 定义管理数组

关联数组使用首先需要申明该数组为关联数组,申明方式: declare -A 数组名称

# 声明关联数组
[root@shell ~]# declare -A asso_array1
[root@shell ~]# declare -A asso_array2

5.2 关联数组赋值

  • 一次赋一个值
# 数组名[索引名称]=变量值
[root@shell ~]# asso_array1[linux]=one
[root@shell ~]# asso_array1[java]=two
[root@shell ~]# asso_array1[php]=three
  • 一次附多个值
asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss zhang")
  • 查看关联数组
[root@shell ~]# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss zhang" )'

5.3 管理数组取值

# 指定索引取值
[root@shell ~]# echo ${asso_array1[linux]}
one
[root@shell ~]# echo ${asso_array1[php]}
three

# 去除数组所有值
[root@shell ~]# echo ${asso_array1[*]}
three two one
[root@shell ~]# echo ${!asso_array1[*]}
php java linux

# 统计数组元素个数
[root@shell ~]# echo ${#asso_array1[*]}
3
[root@shell ~]# echo ${#asso_array2[*]}
4

# 取出数组所有元素的索引
[root@shell ~]# echo ${!asso_array2[*]}
name3 name2 name1 name4

5.4 综合案例 

写一个监控CPU 平均负载值的脚本

案例需求

分别打印 CPU 1min 5min 15min load 负载值

案例思路

  1. 如何取CPU负载值,有哪些命令
  2. 如果存储在内存中,变量、数组

案例步骤

  1. 收集cpu load 平均负载值到数组
  2. 打印输出对应的负载值

代码实现

[root@shell ~]# cat cup_load.sh 
#!/bin/bash

#1、收集负载值
cpu_load=(`uptime|tr -s " "|cut -d " " -f9-11|tr "," " "`)

#2、输出负载值
echo "CPU 1 min 平均负载为: ${cpu_load[0]}"
echo "CPU 5 min 平均负载为: ${cpu_load[1]}"
echo "CPU 15 min 平均负载为: ${cpu_load[2]}"

代码效果

上一篇文章:【Shell 脚本速成】05、Shell 运算详解_Stars.Sky的博客-CSDN博客 

参考文章:shell 数组详解-组团学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于订单功能的处理和分析

这两天看了一下RABC的权限管理处理,梳理了一下订单功能的表创建,界面,功能分析。 目录 RABC RBAC0模型 那么对于RABC模型我们怎么创建数据库表? 订单模块的梳理 RABC RABC说的是在用户和权限之间多一个角色,用户与…

软件测试基础

⭐️前言⭐️ 🍉博客主页: 🍁【如风暖阳】🍁 🍉精品Java专栏【JavaSE】、【备战蓝桥】、【JavaEE初阶】、【MySQL】、【数据结构】 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟&…

Spring Cloud OpenFeign - - - >拦截器

源码地址:https://download.csdn.net/download/weixin_42950079/87209379 SpringMVC拦截器 和 OpenFeign拦截器 的区别 初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器: …

虹科分享 | 麦氏比浊仪在药敏试验中的应用

细菌是重要的病原微生物,人类针对不同的病原菌研发了各类抗菌药,这些药物对细菌性疾病的治疗与控制起到了关键作用。然而随着新型致病菌的不断出现,加上细菌在药物使用过程中逐渐产生了耐药性,抗菌药的防治效果越来越差。病原菌对…

Python 中的类与继承

类的定义以及实例的建立 Python中,类通过 class 关键字定义。 例如最简单的一个类定义可以为: class Person(object):pass Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。…

解决单文件组件里的跨域请求数据问题(使用vue单文件组件请求数据必会遇到的问题!!!)

为什么要解决跨域问题: 因为浏览器有限制,只有同域名同端口号下的数据才能拿来用;那如果想拿到不同域名不同端口号下的数据就不行了; 在单文件组件中如何去解决跨域问题: 因为服务器没有跨域限制,只有浏览…

PyTorch(四)Torchvision 与 Transforms

文章目录Log一、Torchvision1. CIFAR10① 介绍② 使用2. 与 Transforms 结合使用总结Log 2022.11.28接着开启新的一章2022.11.29继续学习 一、Torchvision 视频教程中 Torchvision v0.9.0文档Torchvision 官方文档Torchvision Datasets API 文档 1. CIFAR10 ① 介绍 CIFAR…

HBuilder X实现banner轮播图

第一步还是去仔细阅读官方文档,找到组件下面的内置组件里面的swiper,如图所示 官方是提供了一个用来制作轮播图的滑块视图容器:swiper 一般来说,轮播图的图片地址是由后端返回给前端遍历显示在页面上的,所以基本的结构…

世界杯的“中国元素”昂扬大国担当,点面科技全新推出的多模态多功能移动终端踏上卡塔尔征途!

本次世界杯中国足球队没有参加,但是在世界杯的赛场上到处都有中国元素。 中国承建的卢赛尔体育场 卡塔尔世界杯主体育场——卢赛尔球场由中国铁建以总承包身份承建,引发了全球瞩目。在本届世界杯赛事中,该场馆将承担包括决赛在内的10场比赛&…

idea手动创建webapp(在main文件夹下)

SSM自学笔记 文章目录一、Maven使用正常情况首先不使用骨架创建好Maven项目然后选择Project Structure...选择要创建webapp的模块修改路径二、Maven不正常工作时一、Maven使用正常情况 首先不使用骨架创建好Maven项目 然后选择Project Structure… 选择要创建webapp的模块 选好…

前置微小信号放大器在光声技术的血管识别研究中的应用

实验名称:前置微小信号放大器在光声技术的血管识别研究中的应用 研究方向:生物识别技术 测试目的: 利用MATLAB对光声血管进行识别:1、对光声血管图库的图像进行预处理包括归一化、二值化、平滑、细化和毛刺修剪得到细化图像&#…

0109 蓝桥杯真题12

/* * 观察下面的现象,某个数字的立方,按位累加仍然等于自身。 * 1^3 1 * 8^3 512 5128 * 17^3 4913 491317 ... *请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个? *填写该数字,不要填写任何多余的内…

【DevPress】V2.4.3版本发布,增加内容收录管理

DevPress V2.4.3版本于2022年11月10日发版,增加内容收录模块,方便用户内容收录。 一、该版本功能包含 1、新需求 1)控制台增加内容收录管理模块,包括收录内容额度管理、自动收录功能、基于内容搜索做收录以及收录内容列表。 - …

凯利公式 - Kelly formula

欢迎关注沉睡者IT,点上面关注我 ↑ ↑ 凯利公式的概述 凯利公式是一条可应用在投资资金和赌注的公式。应用于多次的随机赌博游戏,资金的期望增长率最高,且永远不会导致完全损失所有资金的后果。它假设赌博可无限次进行,而且没有下…

Netty进阶——粘包与半包(滑动窗口)

TCP 以一个段(segment)为单位,每发送一个段就需要进行一次确认应答(ack)处理,但如果这么做,缺点是包的往返时间越长性能就越差。 为了解决此问题,引入了窗口概念,窗口大小…

微慕积分商城插件

微信小程序专业版在第一个正式版发布的时候,就推出了积分系统。用户登录小程序、签到、发表文章、评论文章、发表话题、回复话题、点赞、赞赏、付费阅读后都可以获得相应的积分。但这个积分攒了足够多后,有什么用呢?可以用于积分阅读文章&…

论文代码测试

一、代码所属论文 1. Document Image Enhancement with GANs - TPAMI journal 代码中的介绍提供了处理四种情况的模型,这四种模型功能分别为 : 1)二值化图片文字; 2)清晰化图片中模糊文字; 3)去除图片水印; 4&…

FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)

1、大家好,今天给大家带来的内容是,基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧(PS侧数据发送至PL侧并没有实现,但是保留了PL读取PS测数据的接口) 2、如果大家用到SoC这种高级功能,那大家应该对于…

系列ML.Net 学习篇【一】——初识机器学习

由于公司项目涉及到机器学习和图像识别,虽然我并不是算法专家,但毕竟需要了解和知道其运转原理,因此自我进行了学习进化,决定在机器学习上有所进展,结合.NET技术的ML.NET,把机器学习的技能提升一个Level,如果你也有兴趣…

vue学习31~39(列表过滤+列表排序+vue检测data中的数据+收集表单数据+过滤器)

1.14 列表过滤 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…