2016-05-19 10 views
1

Я пытаюсь разработать сценарий оболочки, который создает новых пользователей в машине linux. Где имя пользователя и пароль извлекаются из файла конфигурации. Может ли кто-нибудь помочь мне создать скрипт, который создает пользователей со всеми именами пользователей в файле конфигурации.Сценарий оболочки для создания пользователей Linux, где имя пользователя и пароль считываются из файла конфигурации

Моего конфигурационного файл содержит (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 

Я могу создать только 1 пользователя с этим скриптом (то есть с последним). Может ли кто-нибудь помочь мне изменить скрипт и файл конфигурации, чтобы он создавал всех пользователей, упомянутых в файле конфигурации. Моя цель - сохранить неповрежденный сценарий и вносить изменения только в файл конфигурации. Сценарий должен иметь возможность создавать «N» количество пользователей, перечисленных в файле конфигурации.

Заранее спасибо.

ответ

1

Проблема в том, что вы источник guest.cfg, который будет устанавливать переменную username и password умножить время, каждый раз переопределяя предыдущий набор. Вам нужно проанализировать конфигурационный файл.

Один из способов - при условии, что нет перевода строки в имена пользователей/паролей - это с СЭД:

sed -n -e 's/\(password\|username\)="\(.*\)"/\2/gp' guest.cfg 

Это будет печатать строки, которые соответствуют модели: username="..." и password="..." так, например, с вашим примером выход будет быть:

tempuser 
passXXX 
newuser 
ppwdXXX 
lastuser 
pass... 

Как вы можете видеть, теперь вы получили эту картину:

username 
password 
username 
password 
... 

Это может быть использован в цикле в то время:

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 
+0

, я хочу, чтобы улучшить сценарий так, чтобы при создании пользователя я могу передать группу также. я буду использовать useradd -m -p $ pass $ username -g $ usergroup -s/bin/bash. мой файл конфигурации guest.cfg также будет содержать информацию о группе пользователей. т.е. usergroup = guest и список имени пользователя и пароля, который был там ранее. Когда я попробовал команду sed, которую вы предложили, цикл while не работает. Можете ли вы предоставить решение – Adhz

+0

, я хочу улучшить скрипт, чтобы при создании пользователя я мог также передать группу. я буду использовать useradd -m -p $ pass $ username -g $ usergroup -s/bin/bash. мой файл конфигурации guest.cfg также будет содержать информацию о группе пользователей. т.е. usergroup = guest и список имени пользователя и пароля, который был там ранее. Когда я попробовал команду sed, которую вы предложили, цикл while не работает. Можете ли вы предложить решение - – Adhz