首页 > 其他分享 >11@数组使用详解

11@数组使用详解

时间:2022-10-09 22:32:43浏览次数:46  
标签:11 数组 18 echo 详解 aliyun array root


文章目录

数组

一、 数组介绍

1、什么是数组?

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

2、为何要用数组?

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

二 、数组的使用

1、 数组的定义

# 方式一: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

2、访问数组内元素

[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

3、修改/添加数组元素

[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")'

4、 删除数组元素

[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 ~]#

5、 数组内元素的截取

[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}

6、数组内容的替换

[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}

三 、关联数组

1、数组分为两种

  • 普通数组:只能使用整数作为数组索引,我们前面介绍的都是普通数组
  • 关联数组:可以使用字符串作为数组索引,需要用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"]}

四、遍历数组

1、方法一:

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

# 例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[*]}

2、方法二:

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

# 例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]}

3、方法三:

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

#根据数组长度进行遍历一
#!/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]#

五、数组的使用

案列一:对指定的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

案列二: 统计登录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]}

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

[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


标签:11,数组,18,echo,详解,aliyun,array,root
From: https://blog.51cto.com/u_15166421/5741858

相关文章

  • 02@变量与常量(详解)
    文章目录​​变量​​​​一、变量介绍​​​​1、什么是变量​​​​2、为何要有变量​​​​二、变量的使用​​​​1、先定义​​​​2、后引用​​​​3、删除变量​......
  • C语言-数组打印图形
    例题:打印等腰三角形答案intmain(intargc,char*argv[]){ intn; scanf("%d",&n); inti,j,k;//  打印行打印星号打印空格。 for(i=1;i<=n;i++) { for(j=1;j<=......
  • 后缀数组
    后缀数组相关后缀数组基础的数组有两个:\(\text{sa}[]\)和\(\text{rk}[]\)。\(\text{sa}[i]\)表示“第\(i\)小的后缀是第几个后缀”,\(\text{rk}[i]\)表示“第\(i\)......
  • P3811 乘法逆元
    【模板】乘法逆元题目背景这是一道模板题题目描述给定\(n,p\)求\(1\simn\)中所有整数在模\(p\)意义下的乘法逆元。这里\(a\)模\(p\)的乘法逆元定义为\(ax......
  • @Devops jenkins安装jenkins的项目构建详解
    文章目录​​Devops​​​​一、jenkins安装步骤​​​​1、安装jdk​​​​2、获取安装包​​​​3、安装​​​​4、配置文件修改​​​​5、启动jenkins​​​​6、浏览......
  • 牛客网高频算法题系列-BM18-二维数组中的查找
    牛客网高频算法题系列-BM18-二维数组中的查找题目描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺......
  • Leetcode 11 -- 双指针&&贪心
    题目说明盛水最多的容器题目要求我们找出两个边界\(L\)和\(R\),使得容量:\(min(right[L],right[R])*(R-L)\)的值最大。思路算法不是玄学。首先,两层for循......
  • C++数组
    概述C++支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个......
  • Android进阶笔记-7. Context详解
    Context数量Activity数量+Service数量+1(1为Application)Context的继承关系Context下有两个子类,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现......
  • Go Mutex 源码详解
    前言在上一篇文章中,我们一起学习了如何使用​​Go​​​中的互斥锁​​Mutex​​​,那么本篇文章,我们就一起来探究下​​Mutex​​底层是如何实现的,知其然,更要知其所以......