首页 > 系统相关 >Shell数组基本概述

Shell数组基本概述

时间:2022-12-12 20:11:21浏览次数:31  
标签:Shell array1 echo qiudao 概述 数组 array root

1. 数组基本概述

01. 什么是数组?

数组其实也算是变量,传统的变量只能存储一个值,但数组可以存储多个值。

02. 数组的分类

Shell数组分为普通数组和关联数组。

普通数组:只能使用整数作为数组索引。

关联数组:可以使用字符串作为数组索引。

2. 数组基本使用

01. 普通数组仅能使用整数来作为索引

#普通数组赋值方式

#1.方式一:针对每个索引进行赋值

[root@qiudao ~]# array1[0]=pear
[root@qiudao ~]# array1[1]=apple
[root@qiudao ~]# array1[2]=orange
[root@qiudao ~]# array1[3]=peach

2.方式二:一次赋多个值,数组名=(多个变量值)

[root@qiudao ~]# array2=(tom jack alice)
[root@qiudao ~]# array3=(tom jack alice "bash shell")
[root@qiudao ~]# array4=(1 2 3 "linux shell" [20]=puppet)

#3.方式三:将该文件中的每一个列作为一个元数赋值给数组array5,默认以空格为分割符

[root@qiudao ~]# array5=(`cat /etc/passwd`)

02. 如何查看普通数组的赋值与访问数组的内容

#1.定义普通数组,其实也可以不用定义

[root@qiudao ~]# declare -a array

2.统计数组元数的个数''

[root@qiudao ~]# echo ${#array1[@]}
4

3.访问数组中的第一个元素

[root@qiudao ~]# echo ${array1[0]}
pear

4.从数组索引1开始

[root@qiudao ~]# echo ${array1[@]:1}
apple orange peach

#5.从数组索引1开始,访问两个元素

[root@qiudao ~]# echo ${array1[@]:1:2}
apple orange

6.访问数组中所有数据,相当于echo ${array1[*]}

[root@qiudao ~]# echo ${array1[@]}
pear apple orange peach

03. 关联数组能使用字符串的方式作为索引

关联数组赋值

#1.定义关联数组, 申明是关联数据

[root@qiudao ~]# declare -A tt_array_1
[root@qiudao ~]# declare -A tt_array_2

2.方式一:给关联数组进行赋值,数组名[索引]=变量值

[root@qiudao ~]# tt_array1[index1]=pear
[root@qiudao ~]# tt_array1[index2]=apple
[root@qiudao ~]# tt_array1[index3]=orange
[root@qiudao ~]# tt_array1[index4]=peach

3.方式二:给关联数组一次赋多个值

[root@qiudao ~]# tt_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell')

4.查看关联数组

[root@qiudao ~]# declare -A

04. 如何访问关联数组中的数据。

1.访问数组中的第二个元数

[root@qiudao ~]# echo ${tt_array2[index2]}
jack

2.访问数组中所有元数

等同于 echo ${array1[*]}

[root@qiudao ~]# echo ${tt_array2[@]}
bash shell tom jack alice

3.访问数组中所有元数的索引

[root@qiudao ~]# echo ${!tt_array2[@]}
index4 index1 index2 index3

3. 数组遍历与循环

方式一:通过数组元数的个数进行遍历(不推荐) 。

方式二:通过数组元数的索引进行遍历(推荐) 注意: 将统计的对象作为数组的索引,仅针对关联数据。

01.普通数组赋值与遍历示例

[root@qiudao ~]# cat array-1.sh
#!/usr/bin/bash
#1.使用while读入一个文件
while read line
do
    #2.定义普通数组, 将读入的每行数据,单个单个进行赋值
    hosts[i++]=$line
    #正常定义普通数组是hosts[1]=test,只不过我们将[]变成自增
    #$line是读取的文件内容
done </etc/hosts
#3.使用for循环遍历数组, 遍历数组的索引
for i in ${!hosts[@]}
do
    echo "hosts数组对应的索引是:$i, 对应的值是: ${hosts[i]}"
done

02.使用关联数组统计文件中的每个Shell数量

[root@qiudao ~]# cat count_passwd.sh
#!/bin/bash
declare -A array_passwd
#1.对数组进行赋值
while read line
do
type=$(echo $line|awk -F ':' '{print $NF}')
let array_passwd[$type]++
done </etc/passwd

2.对数组进行遍历

for i in ${!array_passwd[@]}
do
echo "Shell: $i count: ${array_passwd[$i]}"
done

\#步骤拆分讲解

[root@qiudao ~]# declare -A array_passwd
[root@qiudao ~]# array_passwd=([/bin/bash]=1 [/sbin/nologin]=1)
[root@qiudao ~]# let array_passwd[/bin/bash]++
[root@qiudao ~]# let array_passwd[/sbin/nologin]++
[root@qiudao ~]# echo ${!array_passwd[@]}
/sbin/nologin

nginx log top 10 IP conut

declare -A array_nginx
#1.给关联数组的索引进行赋值
while read line
do
    type=$(echo $line|awk '{print $1}')
    let array_nginx[$type]++
done </var/log/nginx/access.log
#2.遍历数组
for i in ${!array_nginx[@]}
do
    echo "IP是:$i 出现多少次: ${array_nginx[$i]}"
done

04. 统计tOp的状态信息

[root@qiudao ~]# cat array_ss_state.sh
#!/usr/bin/bash
declare -A array_state
type=$(ss -ant |sed '1d' |awk '{print $1}')
#1.对数组进行的索引赋值
for i in $type
do
    let array_state[$i]++
done
#2                                                                            .遍历数组
for j in ${!array_state[@]}
do
    echo "当前的状态是:$j,当前状态出现了多少次:${array_state[$j]}"
done

标签:Shell,array1,echo,qiudao,概述,数组,array,root
From: https://www.cnblogs.com/qq2857519024/p/16976986.html

相关文章

  • 剑指 Offer 56 - II. 数组中数字出现的次数 II(状态转移 位运算)
      ​​剑指Offer56-II.数组中数字出现的次数II​​难度中等38在一个数组 ​​nums​​ 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次......
  • 剑指offer 数组中的逆序对(归并排序)
    ​​剑指Offer51.数组中的逆序对​​难度困难176在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的......
  • 原地合并两个排序数组 O(1)空间复杂度,O(n)时间复杂度
    问题:给你两个从小到大的数组a,b。在不申请额外空间下,往a填充a和b合并后的排序数组(假设a的空间是足够的)。第一种方法:很直觉的思路是,我们采取和归并排序时同样的策略,每次拿出最......
  • android开发adb shell ps无法列出进程列表的解决方法
    问题:C:\WINDOWS\System32>adbshellpsUSERPIDPPIDVSZRSSWCHANADDRSNAMEshell168172271213345633360......
  • S02.shell图形化编程
    whiptail使用消息框语法:whiptail--title"<messageboxtitle>"--msgbox"<texttoshow>"<height><width>示例:#!/bin/bash#--title:表示指定标题内容#--msgbox:......
  • Go语言实战之数组的内部实现和基础功能
    写在前面嗯,学习​​GO​​,所以有了这篇文章博文内容为​​《GO语言实战》​​读书笔记之一主要涉及数组相关知识世上除了爹娘,再没有人是理所应当对你好的。——烽火戏诸侯......
  • 每日算法之把数组排成最小的数
    JZ45把数组排成最小的数描述输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组[3,32,321],则打印出这三......
  • 第一章算法概述总结
    代码规范类及其排版格式声明属性依次序是public:、protected:、private:。关键字public,protected,private不要缩进,声明的函数和变量缩进一个制表符。类声明前应加上注释,注......
  • 数组名的注意事项
    intmain(){ intarr[]={1,2,3,4,5,6,7,8,9,0}; printf("%p\n",arr);//数组名是数组首个元素的地址 printf("%p\n",&arr[0]);//数组名是数组首个元素的地址 printf("......
  • 力扣852(java&python3)-山脉数组的峰顶索引(中等)
    题目:符合下列属性的数组arr称为山脉数组:arr.length>=3存在i(0<i <arr.length-1)使得:arr[0]<arr[1]<...arr[i-1]<arr[i]arr[i]>arr[i+1]>...>......