• 幕客老师召集小伙伴
  • python自动化运维项目实战
  • nginx从入门到实战
  • 阿里云与Centos7实战

Shell-数组

Shell数组变量

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

一、普通数组
定义数组:
方法一: 一次赋一个值
数组名[下标]=变量值
# array1[0]=pear
# array1[1]=apple
# array1[2]=orange
# array1[3]=peach

方法二: 一次赋多个值
# array2=(tom jack alice)
# array3=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3
# array4=(`ls /var/ftp/Shell/for*`)
# array5=(tom jack alice “bash shell”)

查看数组:
# declare -a
declare -a array1='([0]=”pear” [1]=”apple” [2]=”orange” [3]=”peach”)’
declare -a array2='([0]=”tom” [1]=”jack” [2]=”alice”)’

访问数组元数:
# echo ${array1[0]} 访问数组中的第一个元数
# echo ${array1[@]} 访问数组中所有元数  等同于 echo ${array1[*]}
# echo ${#array1[@]} 统计数组元数的个数
# echo ${!array2[@]} 获取数组元数的索引
# echo ${array1[@]:1} 从数组下标1开始
# echo ${array1[@]:1:2} 从数组下标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’)

查看数组:
# 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[@]} 获得数组元数的索引

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

 for index in ${!ass_array1[*]};do echo ${ass_array1[$index]};done

作业:
1. 使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

#!/bin/sh
declare -A parray
j=0
for i in `cat /etc/passwd|awk -F: ‘{print $NF}’`
do
        #echo “$i…”
        parray[index$j]=$i
#       echo ${parray[index$j]}
        let j++
done

count=0
for i in ${!parray[@]}
do
   if [[ ${parray[$i]} == /bin/bash ]];then
      echo ${parray[$i]}
      let count++
   fi
done
echo $count

3. 使用关联数组按扩展名统计指定目录中文件的数量
========================================================

补充:

在bash版本为3.0中,关联数组的定义方式出现区别,如果需要类似的遍历的话,可以用字符串切割的方式使用:

Jeson:tmp renren$ bash --version

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)

Copyright (C) 2007 Free Software Foundation, Inc.

 

#vim /tmp/test.sh

array=(

    'hello::world.'

    'nice::to meet you'

)

 

for index in"${array[@]}" ; do

    KEY="${index%%::*}"

    VALUE="${index##*::}"

    echo"$KEY - $VALUE"

done

Shell-数组

Pingbacks已打开。

引用地址

暂无评论

发表评论