Создайте учетную запись для каждого пользователя и добавьте пользователя в его группу из текстового файла

Есть несколько способов. Вот три:

rename 's/$/.txt/' ???    # Might be prename on some systems

for f in ???; do mv "$f" "$f.txt"; done

find -maxdepth 1 -type f -exec mv {} '{}.txt' \;
0
15.10.2020, 15:43
3 ответа

Пожалуйста, попробуйте это в качестве решения. Вы используете файл, разделенный запятыми -, поэтому я предполагаю, что вы хотите использовать более двух групп в одной точке. То, что вы делаете, не совсем неправильно, но я бы не стал использоватьifelseв этом случае, поскольку его потребуется переписать, если потребуется больше групп. Создание группы также выполняется в цикле.

#!/bin/bash
while read config
do
        USERTOCREATE=$(awk -F, '{print $1}' <(echo "$config"))
        GROUPTOASSIGN=$(awk -F, '{print $2}' <(echo "$config"))
        if [[ ! $(groups) =~ $GROUPTOCREATE ]]; then addgroup $GROUPTOASSIGN; fi
        useradd $USERTOCREATE
        usermod -a -G $GROUPTOASSIGN
done < users

Этот код представляет собой простой цикл while, в котором используются две переменные USERTOCREATEи GROUPTOASSIGN, которые назначаются с помощью awk. Флаг -F,в awk предназначен для установки переменной-разделителя полей FSв запятую. Таким образом, awk может разделить ввод на переменные $1 и $2. Я не уверен, знакомы ли вы с <(). Это дескриптор файла, который позволяет нам обрабатывать вывод echo "$config"как файл. $config— это не что иное, как строка из файла, который читает скрипт.

0
18.03.2021, 22:57
#!/bin/bash
i=0

n=$(wc -l <username.txt)
while [ $i -le $n ]
do
        L=$(awk "NR==$i" username.txt)
        if [ -n "$L" ]; then
                user=$(echo "$L" | cut -d',' -f1)
                group=$(echo "$L" | cut -d',' -f2)
                useradd $user
                groupadd $group
                usermod -a -G $group $user
        fi

i=$((i+1))
done
0
18.03.2021, 22:57

Вы можете разобрать строку username.txt-с помощью ,в качестве разделителя полей:

#!/bin/bash
sudo addgroup staff
sudo addgroup visitors

while IFS=, read -r username maingroup
do
   sudo adduser --ingroup "$maingroup" "$username"
done < username.txt

Это приведет к считыванию токенов, разделенных запятыми -, в переменные оболочки $usernameи $maingroupсоответственно, и выполнению команды adduserдля создания пользователя $usernameс основной группой $maingroup.

0
18.03.2021, 22:57

Теги

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