Problema executando o script Bash do Linux e adicionando a senha igual ao nome de usuário

0

Com o script a seguir, estou tentando criar usuários, grupos e senha a partir de um arquivo txt / cvs.

Aqui está o script:

#!/bin/bash
set -xv
filein="file.csv"
IFS=$'\n'
if [ ! -f "$filein" ]
then
    echo "Cannot find file $filein"
else
    groups=$(cut -d: -f 6 "$filein" | sed 's/ //')
    fullnames=$(cut -d: -f 1 "$filein")
    usernames=$(cut -d: -f 1 "$filein" | tr '[:upper:]' '[:lower:]' | awk '{print substr($1,1,1) $2}')
fi

for group in ${groups[*]}
do
    grep -q "^$group" /etc/group ; (( x=$? ))
    if [ $x -eq 1 ]
    then
        groupadd "$group"
    fi
done

x=0
created=0
for user in ${usernames[*]}
do
  useradd -n -c ${fullnames[$x]} -g "${groups[$x]}" $user 2> /dev/null
  if [ $? -eq 0 ]
  then
      (( created=created+1 ))
  fi
done

echo "${usernames[$x]}" | passwd --stdin "$user" > /dev/null
echo "Complete. $created accounts have been created."

Esta manhã usei shellchek no meu script e modifico parte do código, mas ainda assim tenho 2 problemas.

Um dos problemas é que estou recebendo um erro de shellcheck dizendo:

In test.sh line 29:
useradd -n -c ${fullnames[$x]} -g "${groups[$x]}" $user 2> /dev/null
              ^-- SC2086: Double quote to prevent globbing and word splitting.
                                                  ^-- SC2086: Double quote to prevent globbing and word splitting.

O outro problema que estou tendo é quando tento criar senhas para os nomes de usuários (o mesmo que o nome de usuário).

echo "${usernames[$x]}" | passwd --stdin "$user" > /dev/null

O Ubuntu não encontrou o comando --stdin e já faz um tempo que estou procurando uma solução, mas sem resultado.

Estou apenas começando a criar scripts de shell. Se puderem, por favor, ajudar-me a executar esse script seria incrível.

Obrigado antecipadamente.

    
por Elio Basciani 25.05.2018 / 02:02

0 respostas