Shell脚本教程——数组的定义与使用

TangLu 未命名 2023-05-20 7958 0

一、Shell数组介绍

Shell 数组是一种对数据进行统计和处理的有效方式,通过把需要统计的多个数值集中存放到一个数组中,然后通过每个元素的索引下标就可以灵活处理数据(所以可以简单理解为数组是一个可以存储多个值的变量)


二、Shell数组的定义和使用

Shell中的数组分为了普通数组和关联数字,普通数组的下标索引只能是数字,关联数组可以自定义字符串为索引下标。在Shell中使用小括号进行数组的定义

1、普通数组

· 一次赋予多个元素给数组

IP=("192.168.100.10" "192.168.100.20" shell python)   #定义一个包含4个值的数组,用空格分隔每个元素值
echo $IP         #默认显示数组中第一个元素值
echo ${IP[1]}    #数组中第一个元素值的索引为0,这里1代表显示第二个元素192.168.100.20,以此类推
echo ${IP[@]}    #显示数组中的每个元素值
echo ${!IP[@]}   #显示数组中的出每个索引下标
echo ${IP[*]}    #也是显示数组中的所有元素
echo ${#IP}      #显示第一个元素的字符长度
echo ${#IP[3]}    #指定索引下标后可以显示指定元素的字符长度
echo ${#IP[@]}   #显示数组元素值的个数


· 一次赋予1个值给数组,赋值的时候可以使用索引下标指定元素的位置

array1[0]=python
array1[1]=php
array1[2]=shell


2、关联数组

关联数组的索引可以自定义为字符串,不再必须是整数,但是必须提前声明关联数组,否则Shell会把这个变量作为普通数组处理

dclare -A info    #声明是关联数组,否则shell只认识普通数组
info=([name]=tom [age]=18 [sex]=male)    #和普通数组定义方式有区别
echo ${info[name]}


3、使用命令输出结果动态定义数组

array=`ls /data/backup/mysql_backup_from_dev/`                                                                                                                            
echo ${array[*]}


三、数组使用示例

1、用数组统计不同shell的数量

declare -A shells
while read line
do
  type=`echo $line |awk -F: '{print $NF}'`
  let shells[$type]++
done </etc/passwd

for i in ${!shells[@]}  #遍历索引
do
  echo "$i: ${shells[$i]}"
done


2、统计TCP状态,比如看看有多少用户在请求我们的80端口

declare -A status
type=`ss -an |grep :80 | awk '{print $2}'`

for i in $type
do
    let status[$i]++
done

for j in ${!status[@]}
do
  echo "$j: ${status[$j]}"
done


评论