在一行中将多个用户添加到 UNIX 组

15 bash group

Centos 6.5(可能还有任何)linux 上,我可以创建一个组:

sudo groupadd mygroup
Run Code Online (Sandbox Code Playgroud)

并向其中添加多个用户:

sudo usermod -a -G mygroup userA
sudo usermod -a -G mygroup userB
sudo usermod -a -G mygroup userC
Run Code Online (Sandbox Code Playgroud)

在我的特定情况下,用户数量是20. 我如何使用单线,如:

sudo usermod -a -G mygroup userA userB userC
Run Code Online (Sandbox Code Playgroud)

即使使用 for 循环也可以,但我不是 bash 专家,所以想知道。

Tom*_*art 15

如果gpasswd可用(应该在除 Solaris 之外的大多数发行版上),您可以提供逗号分隔的用户列表,后跟组名:

gpasswd -M userA,userB,userC mygroup
Run Code Online (Sandbox Code Playgroud)

  • 请记住,此解决方案会覆盖现有的组成员列表。这与像“usermod -aG mygroup”这样的“添加”用户不同。 (5认同)
  • 这应该就是答案。 (2认同)

Mas*_*ool 10

for user in userA userB userC; do sudo usermod -a -G mygroup "$user"; done
Run Code Online (Sandbox Code Playgroud)


Giu*_*ero 2

这是一个带有位置参数的基本脚本,将下面的代码保存在名为 的文件中fill_group.sh,并使其可执行chmod +x fill_group.sh

然后将其添加到 PATH 目录 ( /usr/local/bin) 或在其所在的同一目录中执行它./fill_group.sh <group_name> <user1> ... <userN>

#!/bin/sh
#
# Name: fill_group.sh
# 
# Usage: 
# fill_group.sh <group_name> <user1> <user2> ... <userN>
#
# Description:
# add users to specific group passed as first parameter. 
# If the group doesn't exists add it to the system.
set -eu

# Exit if there is not at least 2 args (group,user1)
if [ $# -lt 2  ]; then exit 5; fi

group="${1}"; shift # extract group from arguments
if ! egrep --quiet "^${group}:" /etc/group; then
  sudo groupadd "${group}"
fi

for user in "${@}"; do
    sudo usermod -a -G "${group}" "${user}"
done
Run Code Online (Sandbox Code Playgroud)

  • 另一种验证组的方法:`if ! getent 组“$group”&gt;/dev/null` (2认同)