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

时间:2016-05-19 20:01:08

标签: bash login config-files

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

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

username="tempuser"
password="passXXX"

username="newuser"
password="ppwdXXX"
.....
.....

username="lastuser"
password="pass..."

使用脚本我正在尝试使用上面列出的用户名和密码创建用户。脚本是:

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

我只能使用此脚本创建一个用户(即lastuser)。有人可以帮我修改脚本和配置文件,以便创建配置文件中提到的所有用户。我的目标是保持脚本完整,只对配置文件进行更改。该脚本应该能够创建N' N'配置文件中列出的用户数。

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是您来源guest.cfg会将变量usernamepassword设置为倍数,每次都会覆盖前一组。您需要解析配置文件。

一种方法 - 假设用户名/密码中没有换行符 - 使用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
相关问题