1

假设:

我有一个名为users.txt的文件

username:password:groups
user1:password:group1,group2,group3
user2:password:group3
user3:password:group1,group3
user4:password:group2,group3

代码

#!/bin/bash
FILENAME="users.txt"

while IFS=':' read USERNAME PASSWORD GROUPS
do

    echo "USERNAME" $USERNAME "PASSWORD" $PASSWORD "GROUPS" $GROUPS

done < "$FILENAME"

我希望能够添加一堆用户来进行 samba 共享。我有一个完整的用户列表要输入。我主要在团体方面遇到困难。

两个最大的问题是,如何将组作为一个字符串以及如何加密密码。

我已经阅读了这个网站上的所有教程,但没有一个是有效的。

简单易懂的代码真的很有帮助。谢谢。

更新完成的工作示例

#!/bin/bash
# set filename
FILENAME="users.txt"

# loop through file 
while IFS=':' read USERNAME PASSWORD GROUPNAMES
do

    # add user and assign groups
    echo " "
    echo "ADDING USER: " $USERNAME
    useradd $USERNAME -G $GROUPNAMES

    # add password
    echo -e "$PASSWORD\n$PASSWORD\n" | passwd $USERNAME

    # add user to samba
    echo -e "$PASSWORD\n$PASSWORD\n" | smbpasswd -a $USERNAME

done < "$FILENAME"
4

3 回答 3

3

不要使用 GROUPS 作为变量名:它是系统已经使用的只读变量。只需更改此变量的名称即可。

于 2015-07-09T11:18:17.097 回答
0

我不确定密码加密部分,但我可以就组提出建议。在你的循环内,你可以这样做:

read -ra groups_array -d, <<<"$groups"

现在你有一个包含每个组作为元素的数组。您可以使用扩展将它们作为单独的参数传递给命令,或者使用,等"${groups_array[@]}"单独访问它们。"${groups_array[0]}""${groups_array[1]}"

请注意,我使用的是小写变量名——这是有意的。应保留大写名称以供 shell 使用,否则您将面临覆盖重要名称的风险。

于 2015-07-09T11:22:42.090 回答
-1

上面的优秀脚本:我使用代码共同创建了这个工作版本。

#!/bin/bash

此方法仅在一个文件中包含 bash 代码和数据

安装此文件,运行它并立即将其删除以供将来与新服务器等一起使用。

功能设置用户()
{

首先,删除 linux 和 samba 中的旧用户实例

echo "删除用户:" $1 smbpasswd -d $1 userdel $1

现在在 linux 和 samba 中添加新用户

echo "添加用户:"$1 useradd $1 -G nogroup echo -e "$2\n$2\n" | 密码 $1 echo -e "$2\n$2\n" | smbpasswd -a $1 }

#------------------------------------------------ --------------------------

setupUser tom secret setupUser dick secret setupUser harry secret

于 2021-03-18T19:05:00.680 回答