我是靠谱客的博主 阳光项链,最近开发中收集的这篇文章主要介绍Shell (七) 数组变量Shell 数组变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Shell 数组变量

普通数组:只能使用整数作为数组索引
关联数组:可以使用字符串作为数组索引

一、普通数组

1.定义数组:

方法一: 一次赋一个值 数组名[下标]=变量值

array1[0]=pear 
array1[1]=apple 
array1[2]=orange 
array1[3]=peach 
echo ${array1[1]}

方法二: 一次赋多个值

array2=(tom jack alice) 
array3=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋 值给数组 array3 
array4=(`ls /var/ftp/Shell/for*`)     //根据每个文件作为一个元数赋。
array5=(tom jack alice "bash shell") 
red=a
blue=b
colors=($red $blue $green $recolor) 
array5=(1 2 3 4 5 6 7 "linux shell" [20]=puppet) 
 
 echo ${array2[0]}

2.查看数组:

declare -a 
declare -a array1='([0]="pear" [1]="apple" [2]="orange" [3]="peach")' 
declare -a array2='([0]="tom" [1]="jack" [2]="alice")' 

3.访问数组元数:

echo ${array1[0]} 访问数组中的第一个元数 
echo ${array1[@]} 访问数组中所有元数 等同于 echo ${array1[*]} 
echo ${#array1[@]} 统计数组元数的个数 
echo ${!array2[@]} 获取数组元数的索引 
echo ${array1[@]:1} 从数组下标 1 开始 
echo ${array1[@]:1:2} 从数组下标 1 开始,访问两个元素 

遍历数组:

方法一: 通过数组元数的个数进行遍历
方法二: 通过数组元数的索引进行遍历

二、关联数组

1.定义关联数组:

申明关联数组变量

declare -A ass_array1 
declare -A ass_array2 

方法一:一次赋一个值 数组名[索引]=变量值

ass_array1[index1]=pear 
ass_array1[index2]=apple 
ass_array1[index3]=orange 
ass_array1[index4]=peach 

方法二: 一次赋多个值

ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]='bash shell') 

2.查看数组:

declare -A declare -A ass_array1='([index4]="peach" [index1]="pear" [index2]="apple" [index3]="orange" )' 
declare -A ass_array2='([index4]="bash shell" [index1]="tom" [index2]="jack" [index3]="alice" )' 
 
访问数组元数: 
echo ${ass_array2[index2]} 访问数组中的第二个元数 
echo ${ass_array2[@]} 访问数组中所有元数 等同于 echo ${array1[*]} 
echo ${#ass_array2[@]} 获得数组元数的个数 # echo ${!ass_array2[@]} 获得数组元数的索引 

3.遍历数组:

通过数组元数的索引进行遍历

案例一:使用wile将文件中的数值变为索引的变量值

#!/usr/bin/bash

while read line
do
        hosts[++i]=$line
done </etc/hosts

echo "hosts first: ${hosts[1]}"

for i in ${!hosts[@]}                           //索引直
do
        echo "$i: ${hosts[i]}"                  //输出索引变量值
done

[root@1 ~]# ./hosts.sh
hosts first: 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
1: 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2: ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

案例二:使用for循环将文件中的数值变为索引的变量值

#/usr/bin/bash
IFS=$'
'

for line  in `cat /etc/hosts`
do
         hosts[++j]=$line
done

for i in ${!hosts[@]}
do
        echo "$i: ${hosts[i]}"
done

案例三:统计相同数值

使用awk统计

   
  awk -F":" '{print $NF}' /etc/passwd |sort |uniq -c      //-F表示分隔符  ‘{print $NF}’ 表示第几列 NF表示最后一列  | sort |uniq -c
     43 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     42 /sbin/nologin
      1 /sbin/shutdown

cut命令统计

 cut -d: -f7 /etc/passwd | sort | uniq -c
     43 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     42 /sbin/nologin
      1 /sbin/shutdown

把统计的对象作为数组的索引 sex[m]++

[root@1 ~]# let sex1[1]++
[root@1 ~]# echo "${sex1[1]}"
1
[root@1 ~]# let sex1[1]++
[root@1 ~]# echo "${sex1[1]}"
2

案例四:动态统计端口22连接状态

#!/usr/bin/bash
while :
do
unset status                        //清楚数组变量        #使用while 如果不删除数组数值会累计相加
declare -A status                  //申请数组
type=`ss -an | grep :22 | awk '{print $2}'`
for i in $type
do
        let status[$i]++
done

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

[root@1 ~]# watch  -n1 ./conn_tcp_status.sh

最后

以上就是阳光项链为你收集整理的Shell (七) 数组变量Shell 数组变量的全部内容,希望文章能够帮你解决Shell (七) 数组变量Shell 数组变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部