首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建linux用户的Shell脚本,其中从配置文件中读取用户名和密码。

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

Stack Overflow用户
提问于 2016-05-19 20:01:08
回答 1查看 1.3K关注 0票数 1

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

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

代码语言:javascript
复制
username="tempuser"
password="passXXX"

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

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

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

代码语言:javascript
复制
#!/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‘用户数。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 21:36:18

问题是您源guest.cfg,它将设置变量username和password乘次,每次重写前一组。您需要解析配置文件。

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

代码语言:javascript
复制
sed -n -e 's/\(password\|username\)="\(.*\)"/\2/gp' guest.cfg

这将打印与模式相匹配的行:username="..."和password="...",因此,例如,在您的示例中,输出如下:

代码语言:javascript
复制
tempuser
passXXX
newuser
ppwdXXX
lastuser
pass...

正如您所看到的,您现在得到了这样的模式:

代码语言:javascript
复制
username
password
username
password
...

这可以在while循环中使用:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37332941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档