【Shell 脚本速成】06、Shell 数组详解
创始人
2024-03-01 12:39:55
0

目录

一、数组介绍

二、数组定义

三、数组赋值方式

四、数组取值

案例演示

五、关联数组

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 数组详解-组团学

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...