11@数组使用详解

1|0数组

1|1一、 数组介绍

1|01、什么是数组?

数组就是一系列元素的集合,一个数组内可以存放多个元素

1|02、为何要用数组?

我们可以用数组将多个元素汇总到一起,避免单独定义的麻烦

1|2二 、数组的使用

1|01、 数组的定义

# 方式一:array=(元素1 元素2 元素3) array=(egon 18 male) # 方式二:array=([key1]=value1 [key2]=value2 [key3]=value3) array=([0]=111 [1]="two" [2]=333) # 方式三:依次赋值 array_new[0]=111 array_new[1]=222 array_new[2]="third" # 方式四:利用执行命令的结果设置数组元素:array=($(命令)) 或者 array=(`命令`) 该方式会将命令的结果以空格为分隔符切成多个元素然后赋值给数组 [root@aliyun ~]# ls /test a.txt b.txt [root@aliyun ~]# array3=(`ls /test`) [root@aliyun ~]# declare -a |grep array3 declare -a array3='([0]="a.txt" [1]="b.txt")' # ps:查看声明过的数组 declare -a

1|02、访问数组内元素

[root@aliyun ~]# array=(egon 18 male) #1、按照索引访问数组内指定位置的元素 [root@aliyun ~]# echo ${array[0]} egon [root@aliyun ~]# echo ${array[1]} 18 [root@aliyun ~]# echo ${array[2]} male [root@aliyun ~]# echo ${array[-1]} # 支持负向索引 male # 2、访问数组内全部元素信息 [root@aliyun ~]# echo ${array[*]} egon 18 male [root@aliyun ~]# echo ${array[@]} egon 18 male # 3、获取数组元素的长度 [root@aliyun ~]# echo ${#array[*]} 3 [root@aliyun ~]# echo ${#array[@]} 3

1|03、修改/添加数组元素

[root@aliyun ~]# array=(egon 18 male) [root@aliyun ~]# array[0]="EGON" # 修改 [root@aliyun ~]# array[3]="IT" # 添加 [root@aliyun ~]# declare -a |grep array declare -a array='([0]="EGON" [1]="18" [2]="male" [3]="IT")'

1|04、 删除数组元素

[root@aliyun ~]# unset array[0] [root@aliyun ~]# echo ${array[*]} 18 male IT [root@aliyun ~]# declare -a |grep array declare -a array='([1]="18" [2]="male" [3]="IT")' [root@aliyun ~]# [root@aliyun ~]# [root@aliyun ~]# unset array[2] [root@aliyun ~]# declare -a |grep array declare -a array='([1]="18" [3]="IT")' [root@aliyun ~]# unset array # 删除整个数组 [root@aliyun ~]# echo ${array[*]} [root@aliyun ~]#

1|05、 数组内元素的截取

[root@aliyun ~]# array=(egon 18 male IT 1.80) [root@aliyun ~]# echo ${array[*]:1} # 从索引1开始,一直到最后 18 male IT 1.80 [root@aliyun ~]# echo ${array[*]:1:3} # 从索引1开始,访问3个元素 18 male IT [root@aliyun ~]# array=(one two three four five fire) [root@aliyun ~]# echo ${array[*]#one} two three four five fire [root@aliyun ~]# echo ${array[*]#f*e} one two three four

1|06、数组内容的替换

[root@aliyun ~]# array=(one two three four five fire) [root@aliyun ~]# echo ${array[*]/five/abc} one two three four abc fire [root@aliyun ~]# echo ${array[*]/f*e/abc} one two three four abc abc

1|3三 、关联数组

1|01、数组分为两种

  • 普通数组:只能使用整数作为数组索引,我们前面介绍的都是普通数组
  • 关联数组:可以使用字符串作为数组索引,需要用declare -A声明
#声明关联数组 [root@aliyun ~]# declare -A info [root@aliyun ~]# info["name"]="egon" [root@aliyun ~]# info["age"]=18 [root@aliyun ~]# info["gender"]="male" [root@aliyun ~]# [root@aliyun ~]# declare -A |grep info declare -A info='([gender]="male" [name]="egon" [age]="18" )' [root@aliyun ~]# [root@aliyun ~]# echo ${info[*]} male egon 18 [root@aliyun ~]# [root@aliyun ~]# echo ${info["name"]} egon

1|4四、遍历数组

1|01、方法一:

利用获取所有信息进行遍历 (适用于普通数组与关联数组)

# 例1 declare -A array array=(["name"]="egon" ["age"]=18 ["gender"]="male") for item in ${array[*]} do echo $item done # 例2 array=("egon" 18 "male") for item in ${array[*]} do echo $item done

1|02、方法二:

通过数组元数的索引进行遍历(适用于普通数组与关联数组)

# 例1 declare -A array array=(["name"]="egon" ["age"]=18 ["gender"]="male") for i in ${!array[*]} # echo ${!array[*]} # 获取的是key信息:name age gender do echo "$i:${array[$i]}" done # 例2 array=("egon" 18 "male") for i in ${!array[*]} # echo ${!array[*]} 直接获取所有元素的索引信息 do echo $i echo ${array[i]} done

1|03、方法三:

根据数组长度信息进行遍历,(适用于普通数组)

#根据数组长度进行遍历一 #!/bin/bash array=("egon" 18 "male") for ((i=0;i<${#array[*]};i++)) do echo "$i:${array[$i]}" done #根据数组长度进行遍历二 #!/bin/bash declare -a abc=(`ls /root/`) i=0 num=${#abc[*]} while (( $i < $num )) do echo ${abc[i]} let i++ done [root@web01 hzl]# bash hzl1.sh anaconda-ks.cfg hzl jumpserver.sh [root@web01 hzl]#

1|5五、数组的使用

案列一:对指定的IP地址进行网络测试

#!/bin/bash array=( 10.0.0.7 10.0.0.8 10.0.0.9 10.0.0.41 ) for info in ${array[*]} do ping -c 2 -W 1 $info done

案列二: 统计登录shell的种类及对应的个数(关联数组)

#!/bin/bash declare -A array_for_shell while read line # done后面接<将文件重定向给while;while后再接read将文件流赋值给变量 do login_shell=`echo $line | cut -d: -f7` let array_for_shell["$login_shell"]++ # 当使用let时,变量前面不必加上$ done < /etc/passwd for k in ${!array_for_shell[*]} do echo $k:${array_for_shell[$k]} done

案列三:获取文件指定列的信息

[root@egon test]# cat a.sh #!/usr/bin/env bash declare -A array while read line do let array[`echo $line | cut -d: -f7`]++ done < /etc/passwd for k in ${!array[*]} do echo $k:${array[$k]} done [root@egon test]# [root@egon test]# ./a.sh /sbin/nologin:41 /bin/sync:1 /bin/bash:2 /sbin/shutdown:1 /sbin/halt:1

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121519.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(190)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示