Linux Bash脚本习题求解:统计各可用shell对应的默认用户数量
问题解决说明
原有代码问题
- 仅匹配了当前用户的
$SHELL,无法统计系统中所有用户的默认shell - 使用了题目要求外的
awk命令,不符合规则 - 统计结果变量在循环外赋值,只会输出第一条统计结果,无法遍历所有shell的统计数据
- 未处理示例要求的数量为0的shell输出场景
正确实现
仅使用题目允许的基础命令,实现代码如下:
# 提取/etc/passwd中所有用户的默认shell字段 all_shells=$(cat /etc/passwd | sed 's/.*://') # 遍历目标shell逐个统计数量 for sh in /bin/sh /bin/bash /usr/bin/sh /usr/bin/bash; do cnt=$(echo "$all_shells" | grep -xc "$sh") echo "$cnt users have for shell $sh" done
实现逻辑说明
- 用
sed 's/.*://'删除每行最后一个冒号前的所有内容,直接提取出所有用户的默认shell字段 - 遍历题目示例要求输出的4个shell路径,用
grep -xc做整行精确匹配,直接输出匹配到的行数作为用户数 - 即使匹配数量为0也会正常输出,完全符合示例要求的格式
内容的提问来源于stack exchange,提问作者FelonVLAN
相关产品推荐
相关产品推荐

