【问题标题】:How to create a user from a file in Bash?如何从 Bash 中的文件创建用户?
【发布时间】:2023-03-23 11:44:01
【问题描述】:

我有一个名为user.txt 的文件,其中包含大约一百个采用这种格式的条目:user:password:group:shellToUse

例如。 :

martin:pwd123:photo:bash
marc:pwd321:devel:c-shell
...

如何通过使用 Bash 脚本读取此文件中的条目来创建用户?

另外,用户的主目录必须是/home/group/user,默认shellToUse是Bash。

【问题讨论】:

  • 到目前为止你尝试过什么代码?

标签: linux bash shell


【解决方案1】:

如果您的用户拥有必要的权限,您可以使用以下内容

filename="$1"
while IFS=: read uName pw group shell; do
    shell=${shell:-bash}
    # if shell is the empty string, set $shell to bash
    shell_path=$(which $shell)
    useradd -d /home/$group/$uName $uName -g $group -s $shell_path
    echo -e "$pw\n$pw\n | passwd $uName
done < "$filename"
unset IFS

按以下方式调用脚本: ./script_name user.txt

并且不要忘记使脚本可执行,即

chmod u+x 脚本名称

正如 mklement0 建议的那样,这应该会加快脚本的速度。

我不明白关于 shell=${shell:-bash} 的评论

useradd manpage

passwd manpage

【讨论】:

  • 很有希望,但您可以使用IFS=: read uName pw group shell 简化并大大加快读取和解析输入行的速度。另外,您缺少shell=${shell:-bash}。请更好地组织你的叙述文本。
  • 你对 shell=${shell:-bash} 有什么建议?
  • shell=${shell:-bash} 如果 $shell 当前未定义或为空(包含空字符串),则将文字“bash”分配给变量 $shell - 这是满足 OP 要求 shell 默认为bash${&lt;varName&gt;:-&lt;defaultValue&gt;} 语法是parameter expansion 的一个实例。由于您不应该真正以 root 身份运行,因此应该使用 sudo 调用这样的脚本,它会根据每个命令临时提供必要的权限。
【解决方案2】:

如果你使用 bash,伪代码看起来像这样

Open file and read lines 
for eachline in lines:
    Split the line using awk. Take hints from  https://viewsby.wordpress.com/2012/09/14/awk-split-string-using-a-delimiter/ 
    use 'adduser' command to create user with password. Take hints from http://www.tecmint.com/add-users-in-linux/ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 2022-10-22
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    相关资源
    最近更新 更多