Bash скрипты (Как записать скрипт на поточное создание пользователей?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

fakt005
Сообщения: 4
ОС: Win10, Ubuntu20.04

Bash скрипты

Сообщение fakt005 »

Всем добрый день, линуксу еще только учусь, посадили меня админить сервер и нужно создать кучу пользователей. Допустим есть условный список "user1 user2 user3 userN" если просто создать как они есть с именем user я разобрался

Код: Выделить всё

#!/bin/bash/
for user in `more user.txt`
do
echo "$user"
useradd $user
done
вопрос в том, что если я меняю вместо user на Vasiliy и тд, то скрипт не отрабатывает, понимаю что нужно переменную user как-то обозначить чтоб цикл ее брал не зависимо какое имя указано, что-то типа "login=$( echo $line | awk `{print $1}`)" но не могу никак понять как?
Последний раз редактировалось Bizdelnick 14.06.2021 13:35, всего редактировалось 1 раз.
Причина: тег [code]
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Bash скрипты

Сообщение Bizdelnick »

Не понял, что конкретно не отрабатывает? Должно работать. Или же Вы что-то не то меняете на Vasiliy.
Только в шебанге (первой строке) у Вас лишний слеш в конце. И ещё замечание: more у Вас совсем не к месту (хоть и сработает). Тут cat следовало бы использовать.
А ещё для пакетного добавления пользователей есть команда newusers.
Добавлено (13:49):
Думаю, это Вам поможет: https://habr.com/ru/company/ruvds/blog/325928/
Ну или man newusers.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

fakt005
Сообщения: 4
ОС: Win10, Ubuntu20.04

Re: Bash скрипты

Сообщение fakt005 »

Bizdelnick писал:
14.06.2021 13:34
Не понял, что конкретно не отрабатывает?
я о том, что если в файле со списком юзеров вместо user_1 написать другое название юзера то скрипт ошибкой вываливается
Spoiler
test.jpg
Поэтому я и думаю что нужно переменную задать или вообще другой цикл

Код: Выделить всё

#!/bin/bash
cat ~/Desktop/gog/test33.txt | while read line
do
login=$( echo $line | awk `{ print $1}`)
password=$( echo $line | awk `{ print $2 }`)
useradd -d /home/$login -m $login
echo $password | passwd $login -stdin
done
но в этом файле test33.txt я уже сделал по другому
"PRP:123456
RRP:123456
PPR:123456"
и он тоже не отрабатывает - ошибка строка 5, уже каша в голове(
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Bash скрипты

Сообщение Bizdelnick »

Во-первых, давайте не усложнять всякими awk и прочей ненужной фигнёй. Простое решение — самое надёжное.
Во-вторых, единственное сомнительное место в Вашем изначальном скрипте тут:

Код: Выделить всё

useradd $user
Если в переменной $user будет имя пользователя, содержащее только алфавитно-цифровые символы, проблем быть не должно. Они будут, если туда затешутся спецсимволы, например ;. Тогда bash воспримет её как разделитель и идущее после неё попытается выполнить как отдельную команду. Вы не показали содержимое файла, но, похоже, что-то вроде этого и произошло. Поэтому:
  • Используйте кавычки, чтобы bash воспринимал содержимое переменной как единую строку:

    Код: Выделить всё

    useradd "$user"
  • В качестве разделителя в файле используйте переводы строки, пробелы или символы табуляции.
Добавлено (16:01):
И в-третьих, если Вам нужно сразу же задать пароль, я таки рекомендую использовать newusers, тогда вообще никаких скриптов писать не надо. Если даже она Вас по каким-то причинам не устраивает, всё равно не надо использовать passwd: это команда для интерактивного использования, в скриптах она может вести себя непредсказуемо. Для неинтерактивной смены паролей есть команда chpasswd.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

fakt005
Сообщения: 4
ОС: Win10, Ubuntu20.04

Re: Bash скрипты

Сообщение fakt005 »

Спасибо Вам большое, "" решило проблему с ошибкой при создании (тупо моя не внимательность), а с паролями через chpasswd сейчас буду пробовать
Спасибо сказали:

fakt005
Сообщения: 4
ОС: Win10, Ubuntu20.04

Re: Bash скрипты

Сообщение fakt005 »

Все разобрался,

Код: Выделить всё

#!bin/bash
for user in `more mainuser.txt`# здесь файл с именами пользователей построчно
do
echo "$user"
useradd -m "$user" # создаем пользователей с домашней директорией ну или с другими опциями которые нужны
done
for password in `more mainpass3.txt`# файл с "лониг:пароль"
do
cat /home/tester/mainpass3.txt | chpasswd # а тут скармливаем доя установки пароля (указал полный путь до файла т.к. у меня через ~/ не подцеплял
done
может кому пригодится, еще раз спасибо Bizdelnick
Спасибо сказали: