7、使用关联数组按扩展名统计指定目录中文件的数量
思路:使用一个关联数组来统计指定目录中每种扩展名的文件数量。脚本遍历指定目录下的所有文件,并对每个文件进行检查,如果它是一个普通文件,则获取它的扩展名,并将扩展名作为关联数组的键,递增其值。
然后,脚本遍历关联数组,并打印每种扩展名和相应的文件数量。
#!/bin/bash
declare -A file_count # 声明关联数组
# 遍历指定目录下的所有文件,并统计它们的数量
for file in "$1"/*; do
if [ -f "$file" ]; then
ext="${file##*.}" # 获取文件扩展名
((file_count["$ext"]++)) # 将扩展名作为关联数组的键,并递增它的值
fi
done
# 打印统计结果
for ext in "${!file_count[@]}"; do
echo "$ext: ${file_count[$ext]}"
done
6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
思路:
使用一个关联数组来统计/etc/passwd
文件中不同类型shell的数量。脚本使用一个while循环来读取/etc/passwd
文件的每一行,然后将行按照冒号分隔符分成多个字段。其中,第七个字段是用户的登录shell。
脚本将每个shell类型作为关联数组的键,并递增其值。最后,脚本遍历关联数组,并打印每个shell类型和相应的数量。
#!/bin/bash
declare -A shell_count # 声明关联数组
# 读取/etc/passwd文件,并统计每个shell类型的数量
while IFS=: read -r user x uid gid desc home shell; do
((shell_count["$shell"]++))
done < /etc/passwd
# 打印统计结果
for shell in "${!shell_count[@]}"; do
echo "$shell: ${shell_count[$shell]}"
done
5、将/etc/shadow文件的每一行作为元数赋值给数组
思路:
使用mapfile
命令将/etc/shadow
文件的每一行作为元素赋值给名为shadow_lines
的数组。-t
选项告诉mapfile
命令去掉每个元素的末尾换行符。
在Linux系统中,为了保护敏感数据,/etc/shadow
文件默认只有root用户才有读取权限,因此该脚本首先使用$EUID
变量检查当前用户是否是root用户。如果不是,脚本将打印错误消息并退出。
最后,脚本遍历数组并打印每个元素。
#!/bin/bash
# 检查是否是root用户
if [ "$EUID" -ne 0 ]; then
echo "请使用root用户运行该脚本"
exit 1
fi
# 读取/etc/shadow文件,并将每一行作为元素赋值给数组
mapfile -t shadow_lines < /etc/shadow
# 遍历数组并打印每个元素
for line in "${shadow_lines[@]}"; do
echo "$line"
done