Linux 我的脚本不能正常工作
问题:我需要创建一个存储用户和密码的文件。但是我的脚本只保存user1的密码 我用一个例子来更好地解释自己。当使用随机密码创建两个用户时,我的脚本会为两个用户分配相同的密码 user1:Eehei5oo8ohz:/home/user1:/bin/bash user2:Eehei5oo8ohz:/home/user2:/bin/bash 当我的脚本的结果应该是这样的: user1:Eehei5oo8ohz:/home/user1:/bin/bash user2:Kln2149sdpja:/home/user2:/bin/bash 我的脚本:这是我使用的脚本:Linux 我的脚本不能正常工作,linux,bash,shell,debian,Linux,Bash,Shell,Debian,问题:我需要创建一个存储用户和密码的文件。但是我的脚本只保存user1的密码 我用一个例子来更好地解释自己。当使用随机密码创建两个用户时,我的脚本会为两个用户分配相同的密码 user1:Eehei5oo8ohz:/home/user1:/bin/bash user2:Eehei5oo8ohz:/home/user2:/bin/bash 当我的脚本的结果应该是这样的: user1:Eehei5oo8ohz:/home/user1:/bin/bash user2:Kln2149sdpja:/home
#!/bin/bash
##Checking if you are root.##
if [ `id -u` -ne 0 ]
then
echo "you dont are a root user."
exit 1
fi
x=`pwgen 12 1`
for i in {1..2}
do
echo "user$i:@:/home/user$i:/bin/bash" >> users.txt
done
for j in $x
do
sed -i "s/@/$j/" users.txt
done
newusers users.txt
users=`cat users.txt`
login=`echo $i | cut -d: -f1` #username
pass=`cat pass.txt | tr " " _`
password1=`echo $i | cut -d: -f2` #password
for in $users
do
echo "$login:$password1" | chpasswd -m
done
rm users.txt
rm pass.txt
我希望我的解释正确,并感谢所有帮助。您可以通过摆脱sed编辑来简化此脚本,例如更改:
for i in {1..2}
do
echo "user$i:@:/home/user$i:/bin/bash" >> users.txt
done
for j in $x
do
sed -i "s/@/$j/" users.txt
done
到
通过这种方式,您可以一次性获得用户名和密码,并保证获得与密码一样多的用户名。您可以简化脚本并对其进行如下调整。我仅指第一部分:
#!/bin/bash
# checking if you are root.##
if [ `id -u` -ne 0 ]
then
echo "you are not the root user!"
exit 1
fi
for i in {1..2}
do
x=`pwgen 12 1`
echo "user$i:$x:/home/user$i:/bin/bash" >> users.txt
done
这将创建一个文件users.txt,如下所示:
user1:ohng3uxohYi9:/home/user1:/bin/bash
user2:Gah5kiehaemi:/home/user2:/bin/bash
我认为没有必要创建一个用户文件,然后用生成的密码替换@符号,因为您可以从一开始就这样做 sed-i s/x/$i/users.txt将替换所有x个字符,而不仅仅是第一个字符。不要在以后替换x,只需在第一次生成并添加密码即可。您可以改进您的脚本。为什么不在第一个循环的同一个迭代中创建密码和用户条目?@Jdamian感谢您的帮助,但是,我如何才能获得不重复相同密钥的密码?。我用我的新代码编辑了这篇文章,你为我做了两次!第一次为i做a,第二次为j做a。不要使用完全相同的var!对于{1..2}中的i和$pass中的j。试着这样做,看看是否成功works@BogdanStoica谢谢你,但是不要工作。工作完美:
user1:ohng3uxohYi9:/home/user1:/bin/bash
user2:Gah5kiehaemi:/home/user2:/bin/bash