Bash Shell脚本,用于创建从配置文件读取用户名和密码的linux用户

Bash Shell脚本,用于创建从配置文件读取用户名和密码的linux用户,bash,login,config-files,Bash,Login,Config Files,我正在尝试开发一个shell脚本,在linux机器上创建新用户。其中用户名和密码是从配置文件获取的。有人能帮我创建一个脚本,创建配置文件中所有用户名的用户 我的配置文件包含(myconf.cfg) 使用一个脚本,我试图创建上面列出的用户名和密码的用户。剧本是: #!/bin/sh echo "Reading config...." >&2 . /root/Downloads/guest.cfg pass=$(perl -e 'print crypt($ARGV[0], "pa

我正在尝试开发一个shell脚本,在linux机器上创建新用户。其中用户名和密码是从配置文件获取的。有人能帮我创建一个脚本,创建配置文件中所有用户名的用户

我的配置文件包含(myconf.cfg)

使用一个脚本,我试图创建上面列出的用户名和密码的用户。剧本是:

#!/bin/sh 

echo "Reading config...." >&2
. /root/Downloads/guest.cfg

pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)

sudo useradd -m -p $pass $username -s /bin/bash
我只能使用此脚本创建1个用户(即lastuser)。谁能帮我修改脚本和配置文件,这样它就能创建配置文件中提到的所有用户。我的目标是保持脚本完整,只对配置文件进行更改。脚本应该能够创建配置文件中列出的“N”个用户


提前感谢。

问题是您需要源代码
guest.cfg
,它将设置变量
username
password
的倍数,每次都覆盖上一组。您需要解析配置文件

一种方法(假设用户名/密码中没有换行符)是使用sed:

sed -n -e 's/\(password\|username\)="\(.*\)"/\2/gp' guest.cfg
这将打印与模式匹配的行:
username=“…”
password=“…”
因此,例如,对于您的示例,输出将是:

tempuser
passXXX
newuser
ppwdXXX
lastuser
pass...
如您所见,您现在得到了以下模式:

username
password
username
password
...
这可以在while循环中使用:

sed -n -e 's/\(password\|username\)="\(.*\)"/\2/gp' guest.cfg \
  | while IFS= read -r line; do
    if [ -n "$username" ]; then
      password="$line"
      # Do stuff with $username and $password
      # ...
      # At the end you need to unset the username and password:
      username=
      password=
    else
      username="$line"
    fi
  done

,我想改进脚本,以便在创建用户时也可以传递组。我将使用useradd-m-p$pass$username-g$usergroup-s/bin/bash。我的配置文件guest.cfg也将包含用户组信息。ie usergroup=guest和以前存在的用户名和密码列表。当我尝试您建议的“sed”命令时,while循环不起作用。你能提供一个解决方案吗?我想改进脚本,这样在创建用户时我也可以通过组。我将使用useradd-m-p$pass$username-g$usergroup-s/bin/bash。我的配置文件guest.cfg也将包含用户组信息。ie usergroup=guest和以前存在的用户名和密码列表。当我尝试您建议的“sed”命令时,while循环不起作用。您能否提供一个解决方案——
sed -n -e 's/\(password\|username\)="\(.*\)"/\2/gp' guest.cfg \
  | while IFS= read -r line; do
    if [ -n "$username" ]; then
      password="$line"
      # Do stuff with $username and $password
      # ...
      # At the end you need to unset the username and password:
      username=
      password=
    else
      username="$line"
    fi
  done