当前位置: 首页 > Linux

BashShell脚本中的数组用法示例

时间:2023-04-06 19:26:40 Linux

数组是包含多个值的变量,这些值可以是相同类型或不同类型。没有数组大小限制,也没有要求成员变量连续索引或连续分配的限制。数组索引从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.shRedhatBashShellScriptArrayUsageExampleBashShellScriptArrayUsageExample2.在声明期间初始化数组数组可以不单独初始化数组的每个元素,而是可以通过使用括号指定元素列表(以空格分隔)来声明和初始化。语法如下:declare-aarrayname=(element1element2element3)如果元素有空格字符,则需要引号:[root@localhost~]#catarraymain2.sh!/bin/bashdeclare-aUnix=('Debian''Redhat''Ubuntu''Suse''Fedora')echo${Unix[4]}以下是输出:[root@localhost~]#./arraymain2.shFedoraBashShell脚本中的数组用法BashShell脚本示例数组使用实例declare-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.shDebianRedhatUbuntuSuseArrayusageexampleinBashShellscriptArrayusageexampleExamplearrayusageinBashShellscript4.获取数组的长度使用$和#特殊参数获取数组的长度。${#arrayname[@]}可以得到数组长度。[root@localhost~]#catarraymain2.sh!/bin/bashdeclare-aUnix=('Debian''Redhat''Ubuntu''Suse''Fedora')echo${#Unix[@]}#数组中的元素个数echo${#Unix}#The数组第一个元素中的字符数。下面是输出,可以看到第一行输出参数是5,第二行输出第一个元素的字符数是6。[root@localhost~]#./arraymain2.sh56使用示例BashShell脚本中的数组在BashShell脚本中使用数组的示例5.数组中元素的长度${#arrayname[n]}给出了n个元素的长度。[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.sh4BashShell脚本中数组使用示例BashShell中数组使用示例Scripts6.Extractbyoffsetandlengthofarray从索引位置3开始提取2个元素的方法。[root@localhost~]#catarraymain.sh!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')echo${Unix[@]:3:2}下面是输出,[root@localhost~]#./arraymain.shSuseFedoraBashShell脚本数组使用示例BashShell脚本数组使用示例上面的示例返回第三个和第四个索引的值。索引总是从零开始。7、对于数组的特定元素,使用偏移量和长度提取,只提取数组元素的前四个元素。比如获取数组中的第二个元素,获取这个元素的前三个字符:[root@localhost~]#catarraymain.sh!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')echo${Unix[1]:0:3}下面是输出:[root@localhost~]#./arraymain.shRedBashShell脚本中的数组用法示例BashShell脚本中的数组用法示例8.搜索和替换数组元素以下示例在数组中搜索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~]#BashShell脚本中的数组使用示例BashShell脚本中的数组使用示例注意,数组替换不会写入到大批。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-UXBashShellScriptExampleofArrayUsageinBashShellScript在名为Unix的数组,在第7个和第8个索引中分别添加元素“AIX”和“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”的值一片空白。BashShell脚本中的数组使用示例BashShell脚本中的数组使用示例以下示例显示了一种从数组中完全删除元素的方法,索引为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.shDebianUbuntuSuseFedoraUTSOpenLinuxArrayUsageExampleinBashShellScriptingArrayUsageExampleinBashShellScripting在此示例中,${Unix[@]:0:$pos}值获取索引1处的元素,而${Unix[@]:$(($pos+1))}将从第三个索引到最后一个。并结合以上两个输出。这是从数组中删除元素的解决方法之一。11、使用正则表达式删除数组中的元素在搜索条件中,可以给出正则表达式,将剩余的元素存储到另一个数组中,如下图。[root@localhost~]#catarraymain2.sh!/bin/bashdeclare-aUnix=('Debian''Redhat''Ubuntu''Suse''Fedora')declare-apattern=(${Unix[@]/Red*/})echo${pattern[@]}以下是输出:[root@localhost~]#./arraymain2.shDebianUbuntuSuseFedoraBashShell脚本数组使用示例BashShell脚本数组使用示例上面的示例删除了包含“红色”字符的元素。实际上,“Red*”被一个空字符代替了。12、复制数组下面的例子是将Unix数组复制到Linux数组:[root@localhost~]#catarraymain.sh!/bin/bashUnix=('Debian''Redhat''Ubuntu''Suse''Fedora''UTS''OpenLinux')Linux=("${Unix[@]}")echo${Linux[@]}输出如下:[root@localhost~]#./arraymain.shDebianRedhatUbuntuSuseFedoraUTSOpenLinuxBashShell脚本中数组的使用示例BashShell脚本中数组的使用示例13、两个数组的关联展开两个数组的元素,并赋值给新的数组:[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.shDebianRedhatUbuntuSuseFedoraUTSOpenLinuxbashcshjshrshkshrctcsh14BashShell脚本中的数组使用示例BashShell脚本中的数组使用示例本例还打印了数组“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.sh0BashShell脚本中的数组使用示例BashShell脚本中的数组使用示例取消设置数组后,其长度将为零,如上所示。15.将文件内容加载到数组中您可以将文件内容逐行加载到数组中。[root@localhost~]#catloadcontent.sh!/bin/bashfile=(cat./pic.txt)foriin"${file[@]}"doecho$idoneecho-e"\033[31m读取文件内容!\033[0m”以下是输出:[root@localhost~]#./loadcontent.shhttps://www.linuxprobe.com/wp...https://www.linuxprobe.com/wp。..https://www.linuxprobe.com/wp...https://www.linuxprobe.com/wp...https://www.linuxprobe.com/wp...读取文件内容!BashShell脚本BashShell脚本中数组使用示例BashShell脚本中数组使用示例在上面的示例中,使用了一个for循环来逐行显示文件中的每一行内容。小结数组是一个包含多个值的变量,这些值可以是相同类型,也可以是不同类型。没有数组大小限制,也没有要求成员变量连续索引或连续分配的限制。数组索引从0开始。