shell 数组(普通数组、关联数组)

一、普通数组

普通数组在定义时,索引号

如果是方法一,则索引号及对应的值是规定好的

如果是方法二,则索引号是默认的,从  0  开始。

1、定义数组

(1)方法一: 一次赋一个值

数组名[下标]=变量值
array1[0]=pear
查看数组
[root@localhost ~]# declare -a | grep array1
[root@localhost ~]# echo ${array1[@]}

(2)方法二: 一次赋多个值

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

(3)访问数组元数:

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

二、关联数组

关联数组一定要先声明。

1、定义关联数组

(1)方法一: 一次赋一个值

数组名[索引]=变量值
# declare -A  ass_array1
# ass_array1[index1]=1
# ass_array1[index2]=2
# ass_array1[index3]=3
# ass_array1[index4]=4
查看数组
[root@localhost ~]# echo ${ass_array1[@]}

[root@localhost ~]# declare -A   ass_array1      (指定查看某个数组)

[root@localhost ~]# declare -A                           (查看所有的关联数组)

(2)方法二: 一次赋多个值

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

(3)访问数组元素

# echo ${ass_array2[index2]} 访问数组中的第二个元数
# echo ${ass_array2[@]} 访问数组中所有元数 等同于 echo ${array1[*]}
# echo ${#ass_array2[@]} 获得数组元数的个数
# echo ${!ass_array2[@]} 获得数组元数的索引

三、数组和循环

通过循环   定义和显示数组

通过数组   统计数据

1、案例1:while脚本快速定义数组

(1)定义数组

declare -A shells        // 声明数组 shells
while   read  ll         //  通过重定向将文本内容交给 while 去循环。
                        //  while 通过 借助 read 读取文件内容 
                        //  while  以回车作为默认行  每行内容较多,
                            故,定义一个变量  ll  ,将每行内容交给变量  ll  ,方面后续调用每行内容  
do
        tt=`echo $ll |  awk  -F:  '{print $7}'` //  echo  调用变量,直接输出每行内容了。
                                           //  如果把 echo的输出 交给 awk ,则可以按需截取每段内容
        let shells[$tt]++              //   let 运算 (自增)。 

done  <  /etc/passwd                 //  重定向把内容输给 while 循环
 
for i  in  ${!shells[*]}             //  for  循环                                       
do
echo "$i  :  ${shells[$i]}"          //  echo 输出    

done                                //  循环结束

(2)测试数组

[root@localhost ~]# bash array1.sh

1  :   127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
2  :   ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

2、案例2:for脚本快速定义数组

(1)定义数组

[root@localhost ~]# vim for_array.sh 
#!/bin/bash

for line in `cat /etc/hosts`
do
        hosts[++i]=$line    // 定义数组
done

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

(2)测试数组

[root@localhost ~]# bash for_array.sh 
1:  127.0.0.1
2:  localhost
3:  localhost.localdomain
4:  localhost4
5:  localhost4.localdomain4
6:  ::1
7:  localhost
8:  localhost.localdomain
9:  localhost6
10:  localhost6.localdomain6

(3)案例3:数组统计性别

(4)案例4:使用数组统计,用户shell的类型和数量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值