Как извлечь пользовательские данные из файла с помощью awk и создать нового пользователя на его основе?

Мне нужен кто-то, кто мог бы помочь в упражнении. Я могу только использовать сценарии оболочки и awk сделать это:

У вас есть текстовый файл с именем users.txt с этой информацией внутри:

users.txt:

Петр: 7777: / home / store;

Куинн: 7777: / home / account;

Дэвид: 7777: / home / secondstore;

Даниэль: 7777: / home / address;

Сценарий должен создать пользователя, используя первое слово каждой строки, второе слово каждой строки будет использоваться в качестве пароля, а третье - в качестве домашнего каталога. .

Я был бы очень признателен, если бы кто-нибудь указал мне правильное направление.

1
задан 17 May 2014 в 21:26

3 ответа

awk -F: '{print $1}' users.txt предоставит Вам доступ к полю
awk -F: '{print $2}' users.txt имени пользователя-> поле
awk -F: '{print $3}' users.txt пароля-> поле

корневого каталога, как которое Вы могли сделать что-то:

user=`awk -F: '{print $1}' users.txt`;
path=`awk -F: '{print $3}' users.txt`;
useradd -d $path -m $user;
0
ответ дан 17 May 2014 в 21:26

Обе команды в цикле с условием продолжения должны быть выполнены как корень, таким образом, или добавьте sudo с или сохраните это как сценарий удара, и выполните это с sudo (вероятно, предпочтительный).

awk -F ':| ' '{print $1, $2, $3}' users.txt |
while read user password homedir; do
    adduser --home "$homedir" "$user"
    echo "$password" | passwd "$user" --stdin
done
<час>

, С другой стороны, как Вы указали, можно сделать больше внутренний awk. У нас может быть он, печатают всю команду:

$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) }' users.txt
adduser --home /home/almacen1 Jperez; echo 1234 | passwd Jperez
adduser --home /home/contabilidad1 Lgomez; echo 1234 | passwd Lgomez
adduser --home /home/almacen2 Pfernandez; echo 1234 | passwd Pfernandez
adduser --home /home/direccion1 Mramos; echo 1234 | passwd Mramos

И затем просто имеют его, передают все это по каналу в оболочку (при выполнении):

$ awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt
adduser: Only root may add a user or group to the system.
passwd: user 'Jperez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Lgomez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Pfernandez' does not exist
adduser: Only root may add a user or group to the system.
passwd: user 'Mramos' does not exist

, Очевидно, необходимо было бы выполнить вышеупомянутое с sudo (или как корень) для него для выполнения (вот почему, это рвут ошибки). Вы могли использовать awk system() команда, но тогда необходимо провести больше времени, связывая строки. print() делает это действительно простым, таким образом, я пошел с этим.

Только для разъяснения, этим я означаю работать sudo awk -F ':| ' '{ print("adduser --home", $3, $1"; echo", $2 " | passwd", $1) | "/bin/bash" }' users.txt

0
ответ дан 17 May 2014 в 21:26

Установите внутреннего разделителя полей на: и затем просто проигнорируйте последний знак; любым методом... с помощью подстроки или громко жуя его прочь.

Этот код должен указать на Вас в правильном направлении.

Это - случайный пример var IFS, используемого

#!/bin/bash
IFS= 

В Вашем случае, Вы установили IFS =: и выполненный, что тип кода каждой строки.

Для вопросов как они я рекомендую использовать поисковую систему или отправить на большем количестве программирующего дружественного сайта.

,' vals='/mnt,/var/lib/vmware/Virtual Machines,/dev,/proc,/sys,/tmp,/usr/portage,/var/tmp' for i in $vals; do echo $i; done unset IFS

В Вашем случае, Вы установили IFS =: и выполненный, что тип кода каждой строки.

Для вопросов как они я рекомендую использовать поисковую систему или отправить на большем количестве программирующего дружественного сайта.

0
ответ дан 17 May 2014 в 21:26

Другие вопросы по тегам:

Похожие вопросы: