Linux自动化运维(Shell与Ansible)(微课版) 课件 4-1-创建和使用数组_第1页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-1-创建和使用数组_第2页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-1-创建和使用数组_第3页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-1-创建和使用数组_第4页
Linux自动化运维(Shell与Ansible)(微课版) 课件 4-1-创建和使用数组_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux自动化运维项目4:Shell数组与函数

学习目标【知识目标】了解Shell数组的基本概念。了解Shell函数基本概念和语法。了解函数的参数和变量作用域。【技能目标】掌握数组的定义和使用方法。掌握函数的定义和使用方法。掌握函数参数的使用方法和变量的作用域。【素质目标】培养读者的责任感和独立思考能力,使其能够对自己的行为和决策负责,并能够独立思考问题,做出明智的选择。培养读者的逻辑思维能力,使其能够分析问题,形成严密的推理和论证思维。培养读者的安全意识,使其注重Shell脚本编程的安全性,避免代码中出现漏洞,保护系统的安全。Shell数组与函数任务1:创建和使用数组目录/Contents010203索引数组关联数组IFS01索引数组索引数组数组是一种重要的数据结构,用于存储和操作一组相关的数据。在Shell中,数组分为索引数组和关联数组。索引数组是一种常见的数组类型,用于存储有序的数据集合,数组的每个元素都有一个唯一的索引标识其位置,可以使用该索引访问数组中的元素,数组的第一个元素的索引通常是0,第二个元素的索引是1,以此类推。定义索引数组my_array=(value1value2value3...)上述示例中,my_array表示数组名,value1、value2、value3等表示数组元素。linuxos=("openeuler""rhel""centos""ubuntu")linuxversion=(922107)在上述示例中,linuxos数组包含openeuler、rhel、centos、ubuntu等数组元素,linuxversion数组包含9、22、10、7等数组元素。在Shell中,可以通过使用圆括号和一系列值来定义索引数组,数组元素可以是任何Shell支持的数据,包括字符串、数字、命令输出等。访问数组元素索引数组的元素根据索引进行访问和操作,索引从0开始。其中,my_array表示数组名,index表示要访问的元素的索引。注意,数组索引从0开始,如果要访问数组linuxos的第一个元素,可以使用${linuxos[0]}。linuxos=("openeuler""rhel""centos""ubuntu")echo"${linuxos[0]}"#输出:openeuler${my_array[index]}修改、删除数组元素和获取数组长度通过索引将新值赋给数组元素来修改数组中的元素。linuxos[2]="centosstream"echo${linuxos[2]}#输出:centosstream可以使用${#array[@]}来获取数组的长度,即数组元素的个数。length=${#linuxos[@]}echo"数组元素个数:$length"#输出:数组元素个数:4使用unsetarray[index]命令删除数组元素,array表示数组名,index表示要删除的数组元素的索引。比如删除数组中索引为2的元素,可使用unsetlinuxos[2]命令。unsetlinuxos[2]遍历数组使用for语句遍历索引数组的所有元素,具体示例如下:linuxos=("openeuler""rhel""centos""ubuntu")forosin"${linuxos[@]}"doecho"$os"done使用while语句遍历索引数组的所有元素,具体示例如下:linuxos=("openeuler""rhel""centos""ubuntu")len=${#linuxos[@]}i=0while[$i-lt$len];doecho"${linuxos[$i]}"i=$((i+1))doneShell数组表达式在使用for语句和while语句遍历数组时,需要使用特定的表达式来访问数组的元素。数组表达式是一种特殊的语法,用于访问数组中的元素或者获取数组的长度等信息。常见的访问Shell数组表达式如表所示:序号表达式描述1${array[*]}将数组array的所有元素作为一个整体返回2${array[@]}将数组array的所有元素作为独立的值返回3${!array[*]}将数组array的索引列表作为一个整体返回4${!array[@]}将数组array的索引作为独立的值返回5${#array[@]}返回数组array的元素个数6${#array}返回数组array中索引为0的元素的长度7${array[0]}返回数组array中索引为0的元素8${array[@]:1}返回数组array中从索引1开始的所有元素9${array[@]:0:3}返回数组array中从索引0开始的两个元素10${#array[2]}返回数组array中索引为2的元素的长度11${array}返回数组array的第一个元素02关联数组关联数组关联数组(也称为哈希表或字典)是一种用于存储键值对的数据结构,数组中每个键都对应一个值。可以将关联数组视为字典(dictionary)或映射,其中键是字符串,值可以是任意类型的数据。关联数组的每个元素都有一个唯一的键与之关联。关联数组是Bash4.0开始支持的数组类型。关联数组必须首先被声明,才能使用。使用declare-A命令来声明一个关联数组,声明关联数组示例如下:declare-Aarray_name也可以在声明时直接初始化关联数组:declare-Adistrosdistros=(["Ubuntu"]="GNOME"["Fedora"]="GNOME"["Mint"]="Cinnamon"["Debian"]="GNOME"["Manjaro"]="XFCE")添加、修改和删除关联数组元素为关联数组array_name添加3个元素,每个元素由一个键和一个关联的值组成。键使用key表示,值使用value表示。array_name[key1]=value1array_name[key2]=value2array_name[key3]=value3访问关联数组元素echo${array_name[key1]}修改关联数组元素array_name[key1]="openeuler"echo${array_name[key1]}#输出:openeuler删除元素unsetarray_name["key1"]关联数组获取关联数组所有键echo${!array_name[@]}#输出:key3key2key1遍历关联数组元素forkeyin"${!array_name[@]}"doecho"Key:$key,Value:${array_name[$key]}"done#输出:Key:key3,Value:value3Key:key2,Value:value2Key:key1,Value:openeulerforkeyin“${!array_name[@]}”循环遍历数组array_name的所有键。${!array_name[@]}是一种特殊的Shell扩展,用于获取关联数组的所有键。do...done是for循环的主体部分。do后面跟着循环体,done表示循环体的结束。echo"Key:$key,Value:${array_name[$key]}"命令用于打印当前键($key)及其对应的值(${array_name[$key]})。数组元素的值通过${array_name[$key]}来获取,其中$key是当前迭代的键。03IFSIFS在Shell脚本中,IFS(InternalFieldSeparator,内部字段分隔符)是一个内部变量,用于指定分隔项目列表或值列表的分隔符。默认情况下,IFS的值可以为空格、制表符和换行符等,也可以根据需要自定义。在特定的场景下,可以使用IFS来分隔字符串,并将分隔后的值存储到Shell数组中。IFS基本语法如下:IFS=<separator>其中,“separator”表示指定的分隔符。可以使用单个字符或多个字符作为分隔符,多个字符之间不需要使用分隔符分隔开。line="HelloWorld"IFS=""read-rafields<<<"$line"echo"${fields[0]}"#输出:Helloecho"${fields[1]}"#输出:World通过空格分隔字符串,具体示例如下:IFS使用IFS指定一个自定义的分隔符。使用IFS指定一个自定义的分隔符。#!/bin/bash#声明一个含有多个字段的字符串string="apple,banana,orange,mango"#使用IFS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论