我尝试通过“useradd”交互式添加用户

我尝试通过“useradd”交互式添加用户

我基本上试图编写一个简单的脚本,以允许交互式使用“useradd”和选择选项。

我试图允许特定用途的选项要么以交互方式定义,要么设置为下一个可用或默认设置。

我遇到的主要问题是如何获取组 id 和组等值的下一个可用值。

我想我可以为主目录和 shell 设置预设值,但我想找出除了为这些变量设置常量之外是否有一种不那么暴力的方法。

到目前为止,我已经做到了这里:

#!/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
    read -p "Enter group id or [default to next available]: " gid
    read -p "Enter additional groups or [default to next available]: " group
    read -p "Enter home directory or [default to next available]: " hdir
    read -p "Enter desired shell or [default to next available]: " difshell

    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 -p$pass -g$gid -G$group -d$hdir -s$difshell $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

我不知道 $HOME 和 $SHELL 变量的“下一个可用”是什么意思。您刚刚设置为默认值的那些:/home/USERNAME或者/bin/bash其他什么。对于$HOME,只需确保该目录不存在 ( [ -e "/home/$username" ] && echo "Directory exists")。

至于组,只需列出可用的组并选择下一个即可。这Debian 的群组政策(我相信这不仅限于 Debian)规定普通用户的 GID 应该在 1000 到 5999 之间。因此,您需要做的就是 parse /etc/passwd,打印该范围内的现有组,然后添加一个:

grp=$(awk -F: '$4>=1000 && $4<6000{print $4+1}' /etc/passwd | sort -n | tail -n1)

如果第四个分隔字段的值在 1000 到 6000 之间,该awk命令将打印该字段的值:加 1。然后对其进行排序并保留纬度线。结果是 GID 比当前最大的 GID 大 1。

相关内容