用于添加用户名,密码和多个组的BASH脚本

时间:2015-07-09 11:02:35

标签: bash multiple-users

假设:

我有一个名为 users.txt

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

CODE

#!/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"

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:-1)

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

#!/bin/bash

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

安装此文件,运行它并立即将其删除以备将来用于新服务器等。

函数 setupUser()
{

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

echo "删除用户:" $1 smbpasswd -d $1 用户$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 设置用户鸡巴的秘密 设置用户哈里秘密