数组

作者: 慕知 | 来源:发表于2020-12-30 14:38 被阅读0次

数组操作

1,数组介绍

相通数据类型放在一起,方便操作;程序会变得更清晰

2,如何使用数组

1)普通数组:declare -a

  • 定义:
方式一
#可加整型数 浮点数 字符,直接定义默认定义普通数组
[root@m01~]# declare -a web_ip=(172.16.1.1 172.16.1.2 172.16.1.3)
[root@m01~]# declare -a array=("abc" 111 1.3)
[root@m01~]# array1=(a b 3)


# 查看
root@m01~]# declare -a
declare -a array='([0]="abc" [1]="111" [2]="1.3")'
declare -a array1='([0]="a" [1]="b" [2]="3")'
declare -a web_ip='([0]="172.16.1.1" [1]="172.16.1.2" [2]="172.16.1.3")'



方式二
[root@m01~]# declare -a ips
[root@m01~]# ips[0]=111
[root@m01~]# ips[1]=222
[root@m01~]# declare -a | grep ips
declare -a ips='([0]="111" [1]="222")'



方式三
[root@m01~]# app=([0]=333 [2]=444)
[root@m01~]# declare -a | grep app
declare -a app='([0]="333" [2]="444")'
  • 取值
# 支持正向取值  也支持负向取值
[root@m01~]# echo ${app[0]}
333
[root@m01~]# echo ${app[-1]}
444

2)关联数组:declare -A

  • 定义
# 支持字符 也序号数字
[root@m01~]# declare -A excel=([name]=zxx [age]=18 [hobby]=sing)
[root@m01~]# declare -A abc=([0]=www [age]=18)

root@m01~]# declare -A
declare -A abc='([age]="18" [0]="www" )'
declare -A excel='([hobby]="sing" [name]="zxx" [age]="18" )'
  • 取值
[root@m01~]# echo ${excel["age"]}
18
3,访问数组内元素
  • 取值
# 取出所有值
[root@m01~]# declare -A y=([a1]=12 [a2]=13 [a3]=14)
[root@m01~]# echo ${y[*]}
14 13 12


#只取出索引
[root@m01~]# echo ${!y[*]}
a3 a2 a1

#获取数组元素的长度
[root@m01~]# echo ${#y[*]}
3
  • 修改/添加数组元素
[root@m01~]# declare -A x=([1]=a [2]=b [c]=c)
[root@m01~]# echo ${x[*]}
c a b

#添加数组元素
[root@m01~]# x[0]=p
[root@m01~]# echo ${x[*]}
c p a b

#已存在的即修改
[root@m01~]# x[0]=2
[root@m01~]# echo ${x[*]}
c 2 a b
  • 删除数组元素
[root@m01~]# echo ${x[*]}
c 2 a b

# 删除数组元素
[root@m01~]# unset x[2]
[root@m01~]# echo ${x[*]}
c 2 a

#删除数组
[root@m01~]# unset x
[root@m01~]# echo ${x[*]}


=================

[root@m01~]# line=(one two thre thae toe six)
[root@m01~]# echo ${line[*]}
one two thre thae toe six


#删除指定元素
[root@m01~]# echo ${line[*]#six}
one two thre thae toe


#删除同一特性的元素
[root@m01~]# echo ${line[*]#t*e}
one two six


[root@m01~]# for i in `echo ${line[*]}`;do echo $i;done
one
two
thre
thae
toe
six
  • 数组内元素的截取
[root@m01~]# echo ${line[*]}
one two thre thae toe six

#截取去掉第一个元素的值
[root@m01~]# echo ${line[*]:1}
two thre thae toe six
#截取去掉第一个元素后的三个值
[root@m01~]# echo ${line[*]:1:3}
two thre thae
  • 元素的替换
[root@m01~]# echo ${line[*]}
one two thre thae toe six

# 把one替换成onee(只能临时替换)
[root@m01~]# echo ${line[*]/one/onee}
onee two thre thae toe six

# 后面不加内容,即删除(只能临时替换)
[root@m01~]# echo ${line[*]/one/}
two thre thae toe six
4,遍历数组
1, 普通数据遍历
第一种方式
[root@m01~]# zx=(111 222 333 444 555)
[root@m01~]# echo ${zx[*]}
111 222 333 444 555

[root@m01~]# for ((i=0;i<5;i++));do echo ${zx[$i]};done
111
222
333
444
555

第二种方式
[root@m01~]# for ((i=0;i<${#zx[*]};i++));do echo ${zx[$i]};done
111
222
333
444
555



2,通用数据遍历
 --取出值及索引
[root@m01~]# vim /script/zx1.sh
#!/bin/bash
declare -A zx1=([name]="zx" [age]=16 [hobby]="sing")
for iterm in ${zx1[*]}
do
    echo $iterm
done

echo ==========

for i in ${!zx1[*]}
do
    echo $i
done


[root@m01~]# chmod +x /script/zx1.sh
[root@m01~]# /script/zx1.sh
sing
zx
16
==========
hobby
name
age



示例1:
#列出/etc文件中最后一行及数量

[root@m01~]# vim /script/zx2.sh
#!/bin/bash
declare -A array
while read line
do
    let array[`echo $line | cut -d: -f7`]++
done</etc/passwd
declare -A | grep array

等同于
#!/bin/bash
declare -A array
while read line
do
    arr=`echo $line | cut -d: -f7`
    let array["$arr"]++
done</etc/passwd
declare -A | grep array



[root@m01~]# /script/zx2.sh
declare -A array='([/sbin/nologin]="22" [/bin/sync]="1" [/bin/bash]="2" [/sbin/shutdown]="1" [/sbin/halt]="1" )'


示例2:
[root@m01~]# vim /script/zx3.sh
#!/bin/bash
array=(
    10.0.0.7
    10.0.0.8
    10.0.0.9
)
for info in ${array[*]}
do
    ping -c 2 -w 1 $info
done


[root@m01~]# chmod +x /script/zx3.sh
[root@m01~]# /script/zx3.sh
PING 10.0.0.7 (10.0.0.7) 56(84) bytes of data.
64 bytes from 10.0.0.7: icmp_seq=1 ttl=64 time=0.656 ms

--- 10.0.0.7 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.656/0.656/0.656/0.000 ms
PING 10.0.0.8 (10.0.0.8) 56(84) bytes of data.

--- 10.0.0.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

PING 10.0.0.9 (10.0.0.9) 56(84) bytes of data.

--- 10.0.0.9 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms


相关文章

  • 数组

    数组数组数组数组数组数组数组数组数组

  • JavaScript - 5.数组<增删改查>

    数组 Array 数组 - 增 数组 - 删 / 改 数组 - 查 数组 - 自动 toString() 数组 -...

  • PHP数组使用

    数组定义 数组增、删、改 数组查询 数组排序 数组合并、分割 数组比较、去重复 数组长度 数组遍历 数组转换 其他...

  • 》》》PHP初入---(三)

    数组定义 1.索引数组:数组下标是整型的 声明数组: 访问数组: count(数组)--获取数组长度 查看数组所有...

  • JavaScript中数组的常用操作

    数组的遍历 数组的映射 数组的简化 数组的连接 获取数组的片段 数组的拷贝 查找数组 数组去重

  • JavaSE之数组

    六、数组 目录:数组概述、数组声明创建、数组使用、多维数组、Array类、稀疏数组 1.什么是数组 数组的定义:数...

  • Shell数组、关联数组

    数组 定义数组 获取数组 关联数组 定义关联数组 获取关联数组

  • 学习Java第五天

    数组是多个数据的集合 数组的语法 数组元素类型【】 数组名; 多维数组: 数组元素类型【】【】 数组名; 多维数组...

  • php基础精粹

    PHP php数组 php数组之索引数组初始化 PHP数组之索引数组赋值 PHP数组之访问索引数组内容 PHP数组...

  • C语言的惯用集

    数组部分 数组部分 清空数组a 把数据读进数组a 对数组a求和

网友评论

      本文标题:数组

      本文链接:https://www.haomeiwen.com/subject/dcufoktx.html