shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Extrair comandos a partir de um arquivo


From: Michael Costa
Subject: Re: [shell-script] Extrair comandos a partir de um arquivo
Date: Sat, 18 Mar 2017 23:39:01 -0300

Não há posição definida para o home!
Estou migrando os usuários e grupos de um servidor para outro e preciso recriar eles no destino!
Basicamente este arquivo origem é gerado a partir da saida do comando (id usuario) e grep usuario /etc/passwd (para pegar o home e o shell dele)

Eu nunca montei algo usando esta logica que esta usando! Estou apredendo bastante.

Em 17 de março de 2017 16:38, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:
 

Michael

acho que vc deveria montar seu algoritmo da seguinte forma

1- Parsear seu arquivo de entrada
2- Separar os grupos para serem criados primeiramente
3- Adicionar os usuários em seus respectivos grupos com seus respectivos parâmetros

Mais ou menos desta forma:

#!/bin/bash
grupos=( )
usuarios=( )
while IFS='_' read user uid gid groups1 groups2 home shell resto; do

        groups1=${groups1#groups=}
        groups2=${groups2#groups=}
        grupos+=( ${gid#gid=} ${groups1//,/ } ${groups2//,/ } )

        groups=$(grep -Eo "[a-zA-Z]+" <<< "$groups1 $groups2")
        usuarios+=( "$user:$gid:$uid:$groups:$shell" )

done < arquivo_de_entrada

grupos=( $(sort -nu <(printf "%s\n" ${grupos[@]})) )
for grupo in "${grupos[@]}"; do
        grupo=( $(sed -r 's/(.*)\((.*)\)/\1 \2/' <<< "$grupo") )
        echo groupadd -g ${grupo[0]} ${grupo[1]}
        groupadd -g ${grupo[0]} ${grupo[1]}
done

#useradd -g sapsys -u 32123 -G oper,sapinst -m -s /usr/bin/ksh
for usuario in ${usuarios[@]}; do
        params=( ${usuario//:/ } )
        echo useradd -g ${params[1]} -u ${params[2]} -G ${params[3]} -m -s ${params[4]} ${params[0]}
done
#EOF

Notei que os campos groups se repetem a cada linha. Isso acontece em todas as linhas?
Sobre o que vc falou sobre os campos de home estarem em posições diferentes, qual seria o padrão destas posições?


Atenciosamente
Robson Alexandre

Em sex, 17 de mar de 2017 às 12:07, Michael Costa address@hidden [shell-script] <address@hidden.br> escreveu:
 

Pessoal, bom dia!

Tenho um arquivo com o seguinte conteudo:

maestro_932_gid=931(grpmstr)_groups=1(staff)_groups=1(staff)_/maestro_/bin/bash
sapadm_32123_gid=204(sapsys)_groups=206(oper),208(sapinst)_groups=206(oper),208(sapinst)_/home/sapadm_/usr/bin/ksh
oracle_31201_gid=205(dba)_groups=206(oper),208(sapinst)_groups=206(oper),208(sapinst)_/oracle/SID_/bin/false
usuario_206_gid=204(sapsys)_groups=208(sapinst)_groups=208(sapinst)_/home/usuario_/bin/bash

O que estou tentando fazer, é usar este arquivo como origem e gerar os comandos de criação de usuário e grupo baseado nele.
Problemas que estou enfrentando:

O campo do ((HOME) é variável, as vezes está na sexta posição e em outras vezes varia.
Os grupos se repetem, preciso de uma forma de validar se o comando do grupo já foi processado e não repetir (pensei em jogar todos os comandos para um arquivo e depois dar um uniq nele)
Preciso validar se o grupo ou o usuário já existem no servidor.

A saida esperada, seria algo do tipo:

groupadd -g 931 grpmstr
groupadd -g 1 staff
useradd -g grpmstr -u 932 -G staff -m -s /bin/bash maestro

groupadd -g 204 sapsys
groupadd -g 206 oper
Grupo sapinst já existe no sistema com ID 208
useradd -g sapsys -u 32123 -G oper,sapinst -m -s /usr/bin/ksh

groupadd -g 205 dba
Grupo oper já existe no ambiente com ID 206
Usuario oracle já existe no ambiente. (saida do comando id oracle)

E por ai vai.

Entenderam ?

Agradeço!

--
Atenciosamente

Robson Alexandre



reply via email to

[Prev in Thread] Current Thread [Next in Thread]