You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本开发求助:完成groups脚本的用户列表生成功能

Bash脚本:完成组用户列表文件生成功能

先修正原脚本的问题并实现第三个功能,以下是完整的工作脚本:

#!/bin/bash

# 功能1:打印文件中单行的最大字段数(按\t,:分割)
echo "文件中单行的最大字段数:"
awk -F "[\t,:]" '{if(NF>max) max=NF} END{print max}' groups_file.txt

# 遍历每个组,一次性读取组名与用户列表
while IFS=: read -r group _ _ users; do
    # 功能2:创建组目录,赋予adm和admins组读写执行权限
    mkdir -p "$group"
    # 先设置基础权限,再用ACL给指定组添加权限
    chmod 755 "$group"
    setfacl -m g:adm:rwx "$group"
    setfacl -m g:admins:rwx "$group"

    # 功能3:创建users文件,逐行写入该组的所有用户
    users_file="$group/users"
    # 将逗号分隔的用户列表转为逐行格式写入文件
    echo "$users" | tr ',' '\n' > "$users_file"
    # 给users文件设置adm和admins组的读写权限
    chmod 644 "$users_file"
    setfacl -m g:adm:rw "$users_file"
    setfacl -m g:admins:rw "$users_file"
done < groups_file.txt

关键修改说明:

  • 功能1修正:原代码仅打印字段数超6的行,现在用awk遍历所有行记录最大字段数并输出,符合任务要求。
  • 功能2优化:原代码用chmod +rwx给所有用户开放权限,不符合需求。改用setfacl(访问控制列表)精准给adm和admins组添加读写执行权限。
  • 功能3实现:
    • 用while IFS=: read直接读取文件每行,一次性获取组名与用户列表,避免二次遍历文件,效率更高。
    • 通过tr ',' '\n'将逗号分隔的用户列表转为逐行格式,写入对应组目录下的users文件。
    • 同样用setfacl给users文件添加目标组的读写权限。

注意事项:

  • 确保系统支持setfacl(主流Linux发行版默认支持),若无需精确ACL控制,也可将目录所属组设为adm,再通过组权限配置实现,但ACL方式更直接。
  • 使用mkdir -p避免目录已存在时触发报错。

内容的提问来源于stack exchange,提问作者saretta2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:35:16