2

Я пытаюсь добавить пользователей в систему из файла. Файл выглядит точно так:

user@domain.com password 1
user2@domain.com baddpassword 2

Номера являются их идентификаторами. Это происходит из базы данных mysql, и мне нужно что-то сделать с этими переменными, поэтому мне нужно 4 переменные. USER, PASS, FIRSTID (равный 1) и LASTID (в этом случае последний идентификатор дампа mysql, 2. Это рассматривает более 2 записей одновременно)

Пока что у меня есть это:

for USER in $(awk -F@ 'NR>1 {print $1}' /root/users_w_pass)
do
    for PASS in $(awk 'NR>1 {print $2}' /root/users_w_pass)
    do
        useradd $USER -d /home/$USER -m
        echo "$USER:$PASS" | chpasswd
        ...


    done
done

При выполнении этого пароль не добавляется соответствующему пользователю, и я понятия не имею, как я должен это делать, так как я думал, что это будет работать, но я вижу, как это не так. Кажется, чтобы зациклить пароль. Также я создаю файлы и назначаю ACL для каждого, поэтому запуск newusers для файла здесь не будет работать, тем более что есть и третий столбец.

1 ответ1

4

Вы не хотите читать строки с for. Правильный способ сделать это - использовать while read. Встроенная функция read может автоматически анализировать поля в строке, если они разделены пробелами (пробелы и табуляции). Опция -r гарантирует, что обратные слеши не будут интерпретироваться при чтении:

while read -r user password id; do
    # strip the @domain part from username
    user="${user%%@*}"
    useradd "$user" -d "/home/$user" -m
    echo "$user:$password" | chpasswd
    # and so on
done < your_input_file

Также обратите внимание, что вы не должны использовать все заглавные буквы. $USER уже зарезервирован для вашего имени пользователя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .