为每个用户创建一个帐户,并从文本文件将用户添加到其组中

为每个用户创建一个帐户,并从文本文件将用户添加到其组中

我有一个username.txt文件,其中包含他们的用户名和特定组。截至目前,我正在尝试创建一个 bash 脚本,该脚本允许我为每个用户创建一个帐户,并通过一个命令将用户添加到其组中。

这是目前我失败的 bash 脚本:

#!/bin/bash

sudo addgroup staff
sudo addgroup visitors

username="username.txt"

while read line; do
sudo useradd $-Eo '^[^,]+' $username;
if [grep staff $username]; then
  sudo usermod -a -G staff
else
  sudo usermod -a -G visitors
done < $username

这是我的文件中的内容username.txt

ellipsiscoterie,visitor
magnetcommonest,visitor
belateddefensive,staff
bobstercaramelize,staff

答案1

请尝试将此作为解决方案。您正在使用逗号分隔的文件,因此我的假设是您希望一次使用两个以上的组。您所做的并不是完全错误,但我会避免if else在这种情况下使用,因为它需要重写,以防需要更多组。组的创建也在循环内处理。

#!/bin/bash
while read config
do
        USERTOCREATE=$(awk -F, '{print $1}' <(echo "$config"))
        GROUPTOASSIGN=$(awk -F, '{print $2}' <(echo "$config"))
        if [[ ! $(groups) =~ $GROUPTOCREATE ]]; then addgroup $GROUPTOASSIGN; fi
        useradd $USERTOCREATE
        usermod -a -G $GROUPTOASSIGN
done < users

此代码是一个简单的while循环,使用两个变量USERTOCREATEGROUPTOASSIGN使用 awk 进行分配。-F,awk 中的 flag 是将字段分隔符FS变量设置为逗号。这样 awk 可以将输入拆分为变量 $1 和 $2。我不确定您是否熟悉<()这是一个文件描述符,它允许我们将 的输出echo "$config"视为文件。$config只不过是来自脚本正在读取的文件的行。

答案2

#!/bin/bash
i=0

n=$(wc -l <username.txt)
while [ $i -le $n ]
do
        L=$(awk "NR==$i" username.txt)
        if [ -n "$L" ]; then
                user=$(echo "$L" | cut -d',' -f1)
                group=$(echo "$L" | cut -d',' -f2)
                useradd $user
                groupadd $group
                usermod -a -G $group $user
        fi

i=$((i+1))
done

答案3

您可以username.txt使用字段分隔符逐行解析,

#!/bin/bash
sudo addgroup staff
sudo addgroup visitors

while IFS=, read -r username maingroup
do
   sudo adduser --ingroup "$maingroup" "$username"
done < username.txt

这会将逗号分隔的标记分别读入 shell 变量$username$maingroup,并执行命令以创建具有主要组的adduser用户。$username$maingroup

相关内容