【问题标题】:My script does not work properly我的脚本无法正常工作
【发布时间】:2017-02-03 20:36:51
【问题描述】:

Problem: 我需要创建一个存储用户和密码的文件。但是我的脚本只保存了user1的密码。

Example:我用一个例子更好地解释自己。当使用随机密码创建两个用户时,我的脚本会为两个用户分配相同的密码。

user1:Eehei5oo8ohz:/home/user1:/bin/bash

user2:Eehei5oo8ohz:/home/user2:/bin/bash

当我的脚本的结果应该是这样的:

user1:Eehei5oo8ohz:/home/user1:/bin/bash

user2:Kln2149sdpja:/home/user2:/bin/bash

My script:这是我用过的脚本:

#!/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 -i "s/x/$i/" users.txt 将替换所有 x 字符,而不仅仅是第一个字符。而不是之后替换x,只需在第一次生成并添加密码即可。
  • 您可以改进您的脚本。为什么不在第一个循环的同一迭代中创建密码和用户条目?
  • @Jdamian 感谢您的帮助,但是,我如何获得它不会重复相同的键?我用我的新代码编辑了帖子
  • 你为 i 做了 2 次!在(第 1 次)中为 i 做 a,在(第 2 次)中为 j 做 a。不要使用完全相同的变量!所以对于 {1..2} 中的 i 和 $pass 中的 j。试试这样,看看是否有效
  • @BogdanStoica 对不起,但不工作。

标签: linux bash shell debian


【解决方案1】:

您可以简化您的脚本并进行如下调整(我仅指第一部分):

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

我认为用用户创建文件然后用生成的密码替换 @ 符号是没有意义的,因为您可以从一开始就这样做!

【讨论】:

    【解决方案2】:

    您可以通过摆脱 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
    

       pass=`cat pass.txt`
       i=1
       for pw in $pass
       do
              echo "user$i:$pw:/home/user$i:/bin/bash" >> users.txt
              ((i++))
       done
    

    这样您可以一次性获取用户编号和密码,并且保证您获得与密码一样多的用户名。

    【讨论】:

    • 非常感谢。完美运行:)
    猜你喜欢
    • 2014-12-07
    • 2015-04-04
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2015-07-27
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多