BASH 添加用户名、密码和多个组的脚本
BASH script to add username, password and multiple groups
假设:
我有一个名为 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 共享。我有完整的用户列表要输入。我主要在小组中遇到困难。
两个最大的问题是,如何将组作为一个字符串获取以及如何加密密码。
我已经完成了本网站上的所有教程,其中 none 正在使用。
简单易懂的代码会很有帮助。谢谢
更新完成的工作示例
#!/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"
不要使用 GROUPS 作为变量名:它是系统已经使用的只读变量。只需更改此变量的名称即可。
我不确定密码加密部分,但我可以提供有关群组的建议。在你的循环中,你可以这样做:
read -ra groups_array -d, <<<"$groups"
现在你有一个包含每个组作为元素的数组。您可以使用扩展 "${groups_array[@]}"
将它们作为单独的参数传递给命令,或者使用 "${groups_array[0]}"
、"${groups_array[1]}"
等
单独访问它们
请注意,我使用小写变量名 - 这是故意的。应保留大写名称供 shell 使用,否则您 运行 有覆盖重要名称的风险。
上面的优秀脚本:我使用代码共同创建了这个工作版本。
#!/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
设置用户迪克秘密
设置用户 harry secret
假设:
我有一个名为 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 共享。我有完整的用户列表要输入。我主要在小组中遇到困难。
两个最大的问题是,如何将组作为一个字符串获取以及如何加密密码。
我已经完成了本网站上的所有教程,其中 none 正在使用。
简单易懂的代码会很有帮助。谢谢
更新完成的工作示例
#!/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"
不要使用 GROUPS 作为变量名:它是系统已经使用的只读变量。只需更改此变量的名称即可。
我不确定密码加密部分,但我可以提供有关群组的建议。在你的循环中,你可以这样做:
read -ra groups_array -d, <<<"$groups"
现在你有一个包含每个组作为元素的数组。您可以使用扩展 "${groups_array[@]}"
将它们作为单独的参数传递给命令,或者使用 "${groups_array[0]}"
、"${groups_array[1]}"
等
请注意,我使用小写变量名 - 这是故意的。应保留大写名称供 shell 使用,否则您 运行 有覆盖重要名称的风险。
上面的优秀脚本:我使用代码共同创建了这个工作版本。
#!/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 设置用户迪克秘密 设置用户 harry secret