我正在尝试从文件中将用户添加到系统中。该文件看起来完全像这样:
user@domain.com password 1
user2@domain.com baddpassword 2
这些数字是他们的ID。它来自一个mysql数据库,我需要对这些变量做一些事情,所以我需要4个变量。 USER,PASS,FIRSTID(1)和LASTID(在这种情况下是mysql转储的最后一个ID,2。这一次考虑超过2个条目)
到目前为止,我所拥有的是:
for USER in `cat /root/users_w_pass | sed -n '1!p' | awk -F@ '{print $1}'`
do
for PASS in `cat /root/users_w_pass | sed -n '1!p' | awk -F ' ' '{print $2}'`
do
useradd $USER -d /home/$USER -m -s /home/$USER.sh
echo "$USER:$PASS" | chpasswd
done
done`
当运行这个时,密码不会被添加到相应的用户,我不知道我应该怎么做,因为我认为它会起作用,但我可以看到它没有。此外,我需要做的不仅仅是将它们添加到系统中,我正在创建文件并为每个文件分配ACL,因此在文件上运行newusers
将不起作用,特别是有第三列作为好。
答案 0 :(得分:0)
仅使用bash
:
while read email password trash; do
user=${email%%@*}
useradd "$user" -d "/home/$user" -m -s "/home/$user.sh"
echo "$user:$password" | chpasswd
done < your_file.txt
或(即使我更喜欢第一种解决方案):
while read; do
set -- "$REPLY"
user=${1%%@*}
password=$2
useradd "$user" -d "/home/$user" -m -s "/home/$user.sh"
echo "$user:$password" | chpasswd
done < your_file.txt
如果你想过滤第一行,这是一个解决方案:
i=0
while read email password trash; do
if [[ $i -ne 0 ]]; then
user=${email%%@*}
useradd "$user" -d "/home/$user" -m -s "/home/$user.sh"
echo "$user:$password" | chpasswd
fi
(( i++ ))
done < your_file.txt
在这种情况下无需同时使用awk
和sed
,也绝不使用for i in $(command)
:see this answer。