交互式Bash脚本

时间:2016-12-16 14:19:56

标签: bash

我有一个交互式bash脚本,首先询问用户名,然后询问密码,然后再次确认密码。 (它在我们的ERP系统中创建用户而不是在Ubuntu中)

我有一个包含1000多个用户的CSV和随机生成的密码,所以我必须创建所有这些用户。我想编写一个脚本,从CSV中选择用户,然后在被要求输入密码时,它会从CSV传递密码以创建用户。以下是我所做的,但它没有按预期工作:

while IFS=, 
read -a csv_line; do 
createusr ${csv_line[0]}:${csv_line[1]}:${csv_line[1]};done < Desktop/Passwoerter.csv

它给出了密码不匹配的错误! 个人用户的实际脚本如下:

~$ createuser xyz <press Enter>
password for xyz: whatever <press enter>
confirm password for xyz whatever <enter again>
~$

它不是:

~$ createuser xyz whatever whatever <press enter>
~$ 

如果我一个一个地添加但是有1000多个,那么我正在尝试使用CSV上的小脚本。

2 个答案:

答案 0 :(得分:1)

第一个选项:使用newusers:它是passwd包的一部分。

DESCRIPTION
   The newusers command reads a file (or the standard input by default)
   and uses this information to update a set of existing users or to
   create new users. Each line is in the same format as the standard
   password file.

输入文件格式:

username:passwd:UID:GID:full name,room number,work phone,home phone,other:directory:shell

如您所见,文件中提供了password

下行,您需要使用提供的格式将csv转换为txt。

newusers < file.txt

第二个选项:您可以useradd使用-p切换。

useradd -m -p $(mkpasswd "password") username

-m如果用户的主目录不存在,请创建该目录。

-p加密密码,由crypt(3)返回。

答案 1 :(得分:0)

我找到了我需要的东西,我的脚本看起来像:

while IFS=# read -a csv_line
do
    printf "%s\n%s\n" ${csv_line[1]} ${csv_line[1]} | createuser ${csv_line[0]}  
done

并执行如下:

./insertalluser < Desktop/Passwoerter.csv