Shell数组练习

发布时间 2023-04-02 17:02:50作者: ChAnAn

1、将/etc/shadow文件的每一行作为元素赋值给数组

#!/bin/bash
# 统计行数,作为循环次数
num=`wc -l < /etc/shadow`

for ((i=0;i<=num;i++))
do
  # 根据i的变化取前i行内容再然后截取最后一行加入数组中
  array[$i]=$(head -$i /etc/shadow | tail -1)
done

# 依次输出数组中的内容
for i in ${array[*]}
do
  echo $i
done

2、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

[root@template ~]# cat arr2.sh
#!/bin/bash
declare -A type_shell
while read line
do
  type=`echo $line | awk -F: '{print $7}'`
  let type_shell[$type]++
done < /etc/passwd
for i in ${!type_shell[@]}
do
  echo "$i ...${type_shell[$i]}"
done
[root@template ~]# ./arr2.sh
/sbin/nologin ...14
/bin/sync ...1
/bin/bash ...2
/sbin/shutdown ...1
/sbin/halt ...1

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

#!/bin/bash
declare -A Array
# 取目录下文件FileName,相当于取后缀名
ls $1 | sed 's/ /\n/g' >> $1/FileName.txt

while read FileName
do
   ArrayIndex=${FileName##*.}
   let Array[$ArrayIndex]++
done < $1/FileName.txt
for i in ${!Array[@]}
  do
    echo "$i :::::: ${Array[$i]}"
  done
rm -f $1/FileName.txt