我需要一个简单的脚本。
一个名为 name 的文件userID
由 10 个 unixID 组成,另一个名为 name 的文件passwd
由 file 中这 10 个 unixID 的 10 个密码组成userID
。每个文件的第一个字代表 unixID 和该 unixID 的相应密码。
我认为需要执行两个 for 循环或其他内容来为该特定用户 ID 分配密码
有没有人有什么建议?
答案1
您可以使用文件描述符在单个 while 循环执行中读取两个文件的输入。这是一个例子:
#!/bin/bash
# Assign file descriptors to users and passwords files
exec 3< users.txt
exec 4< passwords.txt
# Read user and password
while read iuser <&3 && read ipasswd <&4 ; do
# Just print this for debugging
printf "\tCreating user: %s with password: %s\n" $iuser $ipasswd
# Create the user with adduser (you can add whichever option you like)
adduser $iuser
# Assign the password to the user, passwd must read it from stdin
echo $ipasswd | passwd --stdin $iuser
done
请注意如何passwd
要求从 读取密码stdin
。您可能需要向上述代码添加大量健全性检查,例如检查文件是否存在、用户名不包含空格、用户在系统上尚不存在等...您还可以扩展脚本以接受这两个文件名称作为输入参数。
这个答案关于堆栈溢出非常有帮助。
答案2
好吧,如果我是你,我只会制作一个包含 unixID、密码的 csv,然后
while IFS=',' read -ra VARARRAY; do
#The userid would be $VARARRAY[0] and passwd would be $VARARRAY[1]
#Create user with distro's preferred method here.
done
为了运行它并保持动态我会
cat newusers | ./createNewUsers.sh
之后你可以
rm newusers
这样密码就不会残留。
堆栈溢出对代码的创建有一点帮助。