如何制作批处理文件将用户添加到组?

如何制作批处理文件将用户添加到组?

我需要帮助完成一个 GCSE 项目,我被最后一个问题难住了。它要求使用 bash 脚本来创建用户,然后将他们分配到组中。我已经让脚本添加了新用户,但我不确定如何在 bash 脚本中将他们添加到组中(使用 制作的 bash 脚本nano)。

有什么帮助/例子吗?

我当前的脚本:

#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
        useradd -m -p $pass $username
        [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
    fi
else
    echo "Only root may add a user to the system"
    exit 2
fi

(看起来是这样的)

答案1

您可以使用这个修改后的脚本:

#!/bin/bash
# Script to add a user to Linux system

if [ "$(id -u)" -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    IFS=' ' read -a grps -p "Enter group names : "

    if grep "^${username}:" /etc/passwd &>/dev/null; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)

        if useradd -m -p "$pass" "$username" &>/dev/null; then
            echo "User has been added to system!"

            for grp in "${grps[@]}"; do
                usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
                || echo "Failed to add user to group $grp"
            done

        else
            echo "Failed to add a user!"
        fi
     fi

else
    echo "Only root may add a user to the system"
    exit 2
fi

请注意,您应该始终引用变量。

这里我主要添加了两件事:

  • IFS=' ' read -a grps -p "Enter group names : "将要求 root 给出以空格分隔的组名,新创建的用户将成为该组的成员

  • 然后for对数组的值进行这个短循环grps

    for grp in "${grps[@]}"; do
         usermod -a -G "$grp" "$username" && echo "User is added to group $grp" \
         || echo "Failed to add user to group $grp"
    done
    

假设组已经存在。如果不存在,您可以使用groupadd创建组,然后将用户添加到该组。

这里我们习惯usermod将用户添加到一个现有的组,这些组将成为该用户的补充组。

查看man usermod详情。

请注意,您不应该使用egrep,它已被弃用,取而代之的是grep -E。事实上,在这种情况下您不需要grep -E

在某些情况下,您的grep模式会失败,例如,如果您有一个用户foobar,并且您正在添加一个名为 的新用户foo。为了解决这个问题,请匹配用户名,后跟:(假设没有用户名具有:) :

grep "^${username}:" /etc/passwd &>/dev/null

也发送 STDERR 到/dev/null

这可以简化为:

if grep "^${username}:" /etc/passwd &>/dev/null; then
        echo "$username exists!"
        exit 1
else ......

下一个if语句也useradd可以跟在此之后。

**此外,还可以对当前脚本进行一些其他改进,但这些改进不适合此上下文。

相关内容