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
相关产品推荐
相关产品推荐

