Мне нужен кто-то, кто мог бы помочь в упражнении. Я могу только использовать сценарии оболочки и awk
сделать это:
У вас есть текстовый файл с именем users.txt с этой информацией внутри:
users.txt
:
Петр: 7777: / home / store;
Куинн: 7777: / home / account;
Дэвид: 7777: / home / secondstore;
Даниэль: 7777: / home / address;
Сценарий должен создать пользователя, используя первое слово каждой строки, второе слово каждой строки будет использоваться в качестве пароля, а третье - в качестве домашнего каталога. .
Я был бы очень признателен, если бы кто-нибудь указал мне правильное направление.
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;
Обе команды в цикле с условием продолжения должны быть выполнены как корень, таким образом, или добавьте 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
Установите внутреннего разделителя полей на: и затем просто проигнорируйте последний знак; любым методом... с помощью подстроки или громко жуя его прочь.
Этот код должен указать на Вас в правильном направлении.
Это - случайный пример 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 =: и выполненный, что тип кода каждой строки.
Для вопросов как они я рекомендую использовать поисковую систему или отправить на большем количестве программирующего дружественного сайта.