数组是包含多个值的变量,这些值可以是相同类型或不同类型。没有数组大小限制,也没有要求成员变量连续索引或连续分配的限制。数组索引从0开始。1.声明一个数组并赋值在bash中,当使用以下格式的变量时,将自动创建一个数组:name[index]=valuename是数组的名称。索引可以是任何数字或表达式,并且必须等于或大于零。要访问数组元素,请使用大括号,例如${name[index]}。下面是访问Unix数组中的第二个元素,认为数组索引从0开始,所以Unix[1]就是第二个元素。[root@localhost~]#catarraymanip.sh#!/bin/bashUnix[0]='Debian'Unix[1]='Redhat'Unix[2]='Ubuntu'Unix[3]='Suse'echo${Unix[1]}执行脚本,下面是输出:[root@localhost~]#./arraymain.shRedhat2。在数组的初始化过程中,没有必要单独初始化数组的每个元素。分隔)来声明和初始化数组。语法如下:declare-aarrayname=(element1element2element3)如果元素有空格字符,则需要引号:[root@localhost~]#catarraymain2.sh#!/bin/bashdeclare-aUnix=('Debian''Redhat''ubuntu''Suse''Fedora')echo${Unix[4]}下面是输出:[root@localhost~]#./arraymain2.shFedoradeclare-a声明了一个数组,括号中的元素都是大批。3.打印整个数组打印整个数组的方法有很多种。如果索引号是@或*,则引用数组的所有成员。您可以在bashshell中使用循环语句来遍历数组元素并打印它们。[root@localhost~]#catarraymain.sh#!/bin/bashUnix[0]='Debian'Unix[1]='Redhat'Unix[2]='Ubuntu'Unix[3]='Suse'echo${Unix[@]}下面是输出结果:[root@localhost~]#./arraymain.shDebianRedhatUbuntuSuse4。获取数组的长度,可以使用$和#的特殊参数来获取数组的长度。${#arrayname[@]}可以得到数组长度。[root@localhost~]#catarraymain2.sh#!/bin/bashdeclare-aUnix=('Debian''Redhat''Ubuntu''Suse''Fedora')echo${#Unix[@]}#中的元素arrayAmountecho${#Unix}#数组第一个元素的字符数。下面是输出,可以看到第一行输出参数是5,第二行输出第一个元素的字符数是6。[root@localhost~]#./arraymain2.sh565。数组中某个元素的长度[root@localhost~]#catarraymain.sh#!/bin/bashUnix[0]='Debian'Unix[1]='Redhat'Unix[2]='Ubuntu'Unix[3]='Suse'echo${#Unix[3]}#索引3处元素的长度。以下是输出。可以看到输出索引3的值为“Suse”,字符长度为4。[root@localhost~]#./arraymain.sh46.通过数组的偏移量和长度提取下面的例子展示了如何提取在名为Unix的数组中从索引位置3开始的2个元素。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')echo${Unix[@]:3:2}下面是输出,[root@localhost~]#./arraymain.sh上面SuseFedora的例子返回了第三个和第四个索引的值。索引总是从零开始。7.对于数组的特定元素,使用偏移量和长度提取仅提取数组元素的前四个元素。例如获取数组中的第二个元素,获取该元素的前三个字符:[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')echo${Unix[1]:0:3}下面是输出:[root@localhost~]#./arraymain.shRed8.搜索和替换数组元素下面的例子在数组中搜索Ubuntu,并将其替换为“FreeBSD”一词。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')echo${Unix[@]/Ubuntu/FreeBSD}下面是输出:[root@localhost~]#./arraymain.shDebianRedhatFreeBSDSuseFedoraUTSOpenLinux[root@localhost~]#注意数组替换不会写入数组。9.向现有数组添加元素以下示例显示向现有数组添加元素的方法。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')Unix=("${Unix[@]}""AIX""HP-UX")echo${Unix[@]}这是输出:[root@localhost~]#./arraymain.shDebianRedhatUbuntuSuseFedoraUTSOpenLinuxAIXHP-UX在名为Unix的数组中,元素“AIX”和在第7、8个索引中分别增加了“HP-UX”。并输出所有数组元素。10.从数组中删除一个元素unset用于从数组中删除一个元素。unset与将“Null”值分配给元素具有相同的效果。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')unsetUnix[1]echo${Unix[@]}echo${Unix[1]}这是输出:[root@localhost~]#./arraymain.shDebianUbuntuSuseFedoraUTSOpenLinux上面的脚本将打印整个数组,以及索引为“1”的值,索引为“的值”1"值为空。以下示例显示了一种从数组中完全删除元素的方法,再次删除索引为1的元素。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')pos=1Unix=(${Unix[@]:0:$pos}${Unix[@]:$(($pos+1))})echo${Unix[@]}下面是输出:[root@localhost~]#./arraymain.shDebianUbuntuSuseFedoraUTSOpenLinuxin在本例中,${Unix[@]:0:$pos}值获取第一个索引处的元素,而${Unix[@]:$(($pos+1))}将获取第3个索引到最后一个索引处的元素。并结合以上两个输出。这是从数组中删除元素的解决方法之一。11、使用正则表达式删除数组中的元素在搜索条件中,可以给出正则表达式,将剩余的元素存储到另一个数组中,如下图。[root@localhost~]#catarraymain2.sh#!/bin/bashdeclare-aUnix=('Debian''Redhat''Ubuntu''Suse''Fedora')declare-apattern=(${Unix[@]/Red*/})echo${pattern[@]}下面是输出:[root@localhost~]#./arraymain2.shDebianUbuntuSuseFedora上面的例子删除了包含“Red”字符的元素。实际上,“Red*”被一个空字符代替了。12.复制数组下面的例子是将Unix数组复制到Linux数组:[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')Linux=("${Unix[@]}")echo${Linux[@]}[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse'Fedora''UTS''OpenLinux');Shell=('bash''csh''jsh''rsh''ksh''rc''tcsh');UnixShell=("${Unix[@]}""${Shell[@]}")echo${UnixShell[@]}echo${#UnixShell[@]}下面是输出:[root@localhost~]#./arraymain.shDebianRedhatUbuntuSuseFedoraUTSOpenLinuxbashcshjshrshkshrctcsh14这个例子同时打印了数组“Unix”和“Shell”数组元素,新数组的元素个数为14.14.删除整个数组unset用于删除整个数组。[root@localhost~]#catarraymain.sh#!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux');Shell=('bash''csh''jsh''rsh''ksh''rc''tcsh');UnixShell=("${Unix[@]}""${Shell[@]}")unsetUnixShellecho${#UnixShell[@]}以下是输出:[root@localhost~]#./arraymain.sh0取消设置数组后,其长度将为零,如上所示。15.将文件内容加载到数组中您可以将文件内容逐行加载到数组中。[root@localhost~]#catloadcontent.sh#!/bin/bashfile=(`cat./pic.txt`)foriin"${file[@]}"doecho$idoneecho-e"\033[31mReadfilecontent!\033[0m”是输出:[root@localhost~]#./loadcontent.shhttps://www.linuxprobe.com/wp-content/uploads/2021/01/windows7.pnghttps://www.linuxprobe.com/wp-content/uploads/2016/12/bigdata.jpghttps://www.linuxprobe.com/wp-content/uploads/2021/01/write-games-and-learn-python.jpghttps://www.linuxprobe.com/wp-content/uploads/2021/01/data-center-inspection.jpghttps://www.linuxprobe.com/wp-content/uploads/2020/03/devolop-like-linux-09.jpg读取文件内容!在上面的例子中,使用了一个for循环,将文件中每一行的内容一一显示出来。本文转载自微信公众号《Linux就该这么学》,可以通过以下二维码关注。转载本文,请联系Linux像这样学习公众号。
