刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

面试题

请编写一个Shell程序,用于计算用户的主组数量并展示每个组的名称及其出现的次数。

使用微信搜索喵呜刷题,轻松应对面试!

答案:

解答思路:

这个问题要求使用Shell脚本来编写一个程序,该程序需要计算用户的主组数目,并显示每个组出现的次数和组名。解答这个问题需要考虑以下几个方面:

  1. 获取用户的主组信息:在Unix和Linux系统中,可以通过查看/etc/group文件来获取用户所属的所有组的信息。这个文件包含了系统中所有组的信息,包括组名、密码(通常留空)、GID和用户列表。我们需要解析这个文件来找到用户的主组信息。
  2. 计算主组数目:一旦我们获取了用户的主组信息,就可以计算用户的主组数目。这通常就是用户在/etc/group文件中出现的次数。
  3. 统计和显示结果:我们需要统计每个组出现的次数,并显示组名。这可以通过解析文件并计数实现。我们可以使用Shell的循环结构和条件语句来完成这个任务。

最优回答:

假设我们有一个Shell脚本叫做count_primary_groups.sh,它的内容可能如下:

#!/bin/bash

# 获取用户的主组信息并计数
count_groups() {
    local user=$1
    local group_count=0
    local group_name=''
    local group_count_map=()  # 用于存储每个组的出现次数

    while read line; do
        if [[ $line =~ :/.*:$user: ]]; then  # 判断是否包含用户的行
            group_name=$(echo $line | awk -F':' '{print $1}')  # 获取组名
            group_count=$((group_count + 1))  # 增加主组计数
            group_count_map[$group_name]=$((group_count_map[$group_name] + 1))  # 更新组名出现次数
        fi
    done < /etc/group  # 读取/etc/group文件内容

    echo "主组数目: $group_count"  # 输出主组数目
    for group in "${!group_count_map[@]}"; do  # 输出每个组的出现次数和组名
        echo "$group: ${group_count_map[$group]}"
    done | sort -n  # 按出现次数排序输出
}

# 使用示例:调用函数并传入用户名作为参数
count_groups "用户名"

这个脚本首先定义了一个函数count_groups,它接受一个参数(用户名),然后读取/etc/group文件,计算用户的主组数目,并统计每个组的出现次数。最后,它输出主组数目和每个组的出现次数。请注意替换脚本中的"用户名"为实际的用户名。此外,该脚本需要具有读取/etc/group文件的权限。

创作类型:
原创

本文链接:请编写一个Shell程序,用于计算用户的主组数量并展示每个组的名称及其出现的次数。

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share