Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我的脚本不能正常工作_Linux_Bash_Shell_Debian - Fatal编程技术网

Linux 我的脚本不能正常工作

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

问题:我需要创建一个存储用户和密码的文件。但是我的脚本只保存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

我的脚本:这是我使用的脚本:

#!/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