Pessoal, estou precisando de uma ajuda com um pequeno script que estou 
montando.

Não é algo complicado de se fazer, mas algo que com pouco experiência 
não estou conseguindo.

Vamos ao problema:

Tenho dois arquivos:

grupos.txt, que o conteudo dele é o seguinte:
grupo:*:usuario1,usuario2,usuario3 (resultado do comando # getent group 
 > grupos.txt)

usuarios.txt, que tem as informações dos usuários (resultado do comando 
# getent passwd > usuarios.txt)

Tratei o usuarios.txt da seguinte forma: # cat usuarios.txt | cut -d: 
-f1,5 | tr : ' '  para que pegasse apenas o nome de usuário e o nome 
completo das pessoas, e substituisse os : por espaço, ficando o arquivo 
com o seguinte formato:
usuario Nome Completo do Usuário, o que também tratei e deixei assim: 
usuario "Nome Completo do Usuário".

Agora o que quero fazer:

pegar todos os usuários pelo username e substituir pelo nome completo no 
arquivo grupos.txt, para que, ao invés de ficar  vomo está, ele me 
mostre o nome completo de cada pessoa que faz parte do grupo, ficando assim:

Grupo1:*:Nome Completo, Nome Completo 2, Nome Completo 3

Então o que pensei, pego a primeira referência de cada arquivo, e com um 
sed eu substituo. Se fosse fazer na mão, ficaria algo como:
# cat grupos.txt | sed 's/usuario/\"Nome Completo\"/'

Isso funciona para cada um, mas se fosse para fazer manualmente não 
estaria fazendo um script ;-)

Com isso resolvi fazer um laço para pegar o conteúdo de cada linha e 
jogar em uma variável para fazer a substituição do arquivo, o que 
começou mais ou menos assim:

#!/bin/bash
for i in $(cat usuarios.txt | cut -d' ' -f1) ;
do
    VAR1=$i
done ;

for j in $(cat usuarios.txt | cut -d\" -f2) ;
do
    VAR2=$j
done ;


E foi ai que me enrosquei. Pois, somente com isso, ele irá listar as 
linhas e jogá-las nas variáveis, mas com esse laço for vai ocorrer que 
as variáveis irão armazenar, dessa forma, a ultima ocorrência dos dois 
laços, correto? Então pensei que esses laçoes devam estar dentro de um 
while, talves, checando algo como:

CONT=`cat usuarios.txt | wc`
while [ $CONT -ge 0 ] ...


E com isso pegar cada linha do cat, para que ele faça algo como, pege a 
VAR1 e compare com a linha do grupo que possua o mesmo nome de usuário e 
substitua por VAR2.

Mas depois disse me enrosquei e fiquei na mão. Talvés existam formas, e 
acredito que sim, muito mais fáceis de fazer isso, mas didaticamente 
falando, poderiam dizer como terminar esse script, e se puderem oferecer 
uma solução amigável além da explicação seria bom para o aprendizado e 
para que da próxima vez eu não tenha que escrever um romance para obter 
ajuda.

Obrigado pela atenção.

Responder a