Discussion:
[shell-script] Script para Pegar nomes num arquivo TXT e formatar a saída usando FOR
brunodiasinfo@yahoo.com [shell-script]
2018-09-01 14:33:12 UTC
Permalink
Prezados bom dia,


Antes de começar, se colar esse conteúdo num TXT ficará melhor para ler ele.


Estou tentando formatar um txt com nomes e sobrenomes (somente para iniciar), eu tenho que pegar esses nomes e sobrenomes e coloca-los de uma forma, que irá gerar um script, para rodar num
server Windows e criar os usuários, são cerca de 200 usuário, no teste deixei apenas 2 para facilitar.


Eu fiz de duas formas, a primeira usando apenas um FOR, mas sem sobrenome, o que é ruim caso eu queira adicionar sobrenome, telefone, idade e por ai vai:


OBs.: Arquivo "pessoa.txt" tem 2 nomes, bruno silva e luana dias.


###########################################################################################################################
#!/bin/bash


# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"


# Usando FOR para pegar cada nome e colocar onde é $i
for i in $nome
do


echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn $***@vivaopinguim.com -fn $i -display \"$(echo $i | sed -r 's/(.)/\U\1/')\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"


done
###########################################################################################################################


# A expressão abaixo vai deixar a primeira letra em Maiúscula colocando entre aspas no comando echo:
\"$(echo $i | sed -r 's/(.)/\U\1/')\"
___________________________________________________________________________________________________________________________


Resultado:


dsadd user cn=bruno,ou=RH,dc=vivaopinguim -samid bruno -upn ***@vivaopinguim.com -fn bruno -display "Bruno" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=luana,ou=RH,dc=vivaopinguim -samid luana -upn ***@vivaopinguim.com -fn luana -display "Luana" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no


Esse funciona bem, porém, caso eu precise adicionar mais dados, como informei acima, não vou conseguir.


___________________________________________________________________________________________________________________________


Segunda forma tentei usar um FOR encadeado.


###########################################################################################################################
#!/bin/bash


# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"


# Pega o segundo nome das pessoas, seria um sobrenome no caso, estou dando REV para pegar o ultimo nome pego o nome e depois dou um REV para voltar ao normal
sobrenome="$(rev pessoas.txt | awk '{ print $1 }' | rev)";


for i in $nome
do
for a in $sobrenome
do
echo "dsadd user cn=$i 20653,ou=RH,dc=vivaopinguim -samid $i -upn $***@vivaopinguim.om -fn $i -display \"$i $a\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"
done
done
###########################################################################################################################


Resultado:


dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn ***@vivaopinguim.om -fn bruno -display "bruno silva" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn ***@vivaopinguim.om -fn bruno -display "bruno dias" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn ***@vivaopinguim.om -fn luana -display "luana silva" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn ***@vivaopinguim.om -fn luana -display "luana dias" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no


Ele mescla os sobrenomes.
___________________________________________________________________________________________________________________________


Como eu gostaria que ficasse:


dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn ***@vivaopinguim.om -fn bruno -display "bruno silva" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn ***@vivaopinguim.om -fn luana -display "luana dias" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no



Teriam alguma dica para me ajudar, lembrando que tem telefones, ramal e muitas outras opções, desde já, muito obrigado pela sua ajuda.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-09-01 15:09:50 UTC
Permalink
Isso aqui deve funcionar e o sed e awk foram substituídos por shell puro:

while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se
houverem
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn $
***@vivaopinguim.com -fn $i -display ${Nome1^} -desc \"Recursos Humanos\"
-pwd \"***@123\" -mustchpwd yes -disable no"
done < pessoa.txt

*PS: O workshop de Shell das dicas-l
<http://www.dicas-l.com.br/educacao/workshop/> começa hoje e é gratuito!
Inscrições em **http://www.dicas-l.com.br/educacao/workshop/
<http://www.dicas-l.com.br/educacao/workshop/>*

Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by ***@yahoo.com [shell-script]
Prezados bom dia,
Antes de começar, se colar esse conteúdo num TXT ficará melhor para ler ele.
Estou tentando formatar um txt com nomes e sobrenomes (somente para
iniciar), eu tenho que pegar esses nomes e sobrenomes e coloca-los de uma
forma, que irá gerar um script, para rodar num
server Windows e criar os usuários, são cerca de 200 usuário, no teste
deixei apenas 2 para facilitar.
Eu fiz de duas formas, a primeira usando apenas um FOR, mas sem sobrenome,
o que é ruim caso eu queira adicionar sobrenome, telefone, idade e por ai
OBs.: Arquivo "pessoa.txt" tem 2 nomes, bruno silva e luana dias.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Usando FOR para pegar cada nome e colocar onde é $i
for i in $nome
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn $
done
###########################################################################################################################
# A expressão abaixo vai deixar a primeira letra em Maiúscula colocando
\"$(echo $i | sed -r 's/(.)/\U\1/')\"
___________________________________________________________________________________________________________________________
dsadd user cn=bruno,ou=RH,dc=vivaopinguim -samid bruno -upn
dsadd user cn=luana,ou=RH,dc=vivaopinguim -samid luana -upn
Esse funciona bem, porém, caso eu precise adicionar mais dados, como
informei acima, não vou conseguir.
___________________________________________________________________________________________________________________________
Segunda forma tentei usar um FOR encadeado.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Pega o segundo nome das pessoas, seria um sobrenome no caso, estou dando
REV para pegar o ultimo nome pego o nome e depois dou um REV para voltar ao
normal
sobrenome="$(rev pessoas.txt | awk '{ print $1 }' | rev)";
for i in $nome
do
for a in $sobrenome
do
echo "dsadd user cn=$i 20653,ou=RH,dc=vivaopinguim -samid $i -upn $
done
done
###########################################################################################################################
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
Ele mescla os sobrenomes.
___________________________________________________________________________________________________________________________
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
Teriam alguma dica para me ajudar, lembrando que tem telefones, ramal e
muitas outras opções, desde já, muito obrigado pela sua ajuda.
'T.Collons' t.collons@gmail.com [shell-script]
2018-09-01 23:04:06 UTC
Permalink
Hola a todos

Completando lo que el gran maestro Julio te respondió Bruno, prueba esta
modificación a su código, a ver si es lo que realmente necesitas.

while read i Resto; do echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim
-samid $i -upn $***@vivaopinguim.com -fn $i -display $i" "${Resto} -desc
\"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no";
done < pessoa.txt
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros
se houverem
do
    echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn
-disable no"
done < pessoa.txt
*PS: O workshop de Shell das dicas-l
<http://www.dicas-l.com.br/educacao/workshop/> começa hoje e é
gratuito! Inscrições em **http://www.dicas-l.com.br/educacao/workshop/
<http://www.dicas-l..com.br/educacao/workshop/>*
Abraços,
Julio
*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
*     http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
*em http://bit.ly/cursoshelljulioneves *
*
*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
*
*
Prezados bom dia,
Antes de começar, se colar esse conteúdo num TXT ficará melhor
para ler ele.
Estou tentando formatar um txt com nomes e sobrenomes (somente
para iniciar), eu tenho que pegar esses nomes e sobrenomes e
coloca-los de uma forma, que irá gerar um script, para rodar num
server Windows e criar os usuários, são cerca de 200 usuário, no
teste deixei apenas 2 para facilitar.
Eu fiz de duas formas, a primeira usando apenas um FOR, mas sem
sobrenome, o que é ruim caso eu queira adicionar sobrenome,
OBs.: Arquivo "pessoa.txt" tem 2 nomes, bruno silva e luana dias.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Usando FOR para pegar cada nome e colocar onde é $i
for i in $nome
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn
\"$(echo $i | sed -r 's/(.)/\U\1/')\" -desc \"Recursos Humanos\"
done
###########################################################################################################################
# A expressão abaixo vai deixar a primeira letra em Maiúscula
\"$(echo $i | sed -r 's/(.)/\U\1/')\"
___________________________________________________________________________________________________________________________
dsadd user cn=bruno,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Esse funciona bem, porém, caso eu precise adicionar mais dados,
como informei acima, não vou conseguir.
___________________________________________________________________________________________________________________________
Segunda forma tentei usar um FOR encadeado.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Pega o segundo nome das pessoas, seria um sobrenome no caso,
estou dando REV para pegar o ultimo nome pego o nome e depois dou
um REV para voltar ao normal
sobrenome="$(rev pessoas.txt | awk '{ print $1 }' | rev)";
for i in $nome
do
        for a in $sobrenome
        do
        echo "dsadd user cn=$i 20653,ou=RH,dc=vivaopinguim -samid
-mustchpwd yes -disable no"
        done
done
###########################################################################################################################
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Ele mescla os sobrenomes.
___________________________________________________________________________________________________________________________
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Teriam alguma dica para me ajudar, lembrando que tem telefones,
ramal e muitas outras opções, desde já, muito obrigado pela sua ajuda.
--
Pere

***@gmail.com <mailto:***@gmail.com>



<https://www.google.com/>

------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges
d'empresa i altre informació confidencial tutelada per les lleis de
Europea i altres estats, Si VostÚ el rep per error o sense ser una de
les persones esmenades a la capçalera, haurà de destruir-lo sense
copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el
contingut del missatge i notificar-ho per correu electrònic a l'emissor
del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat
podran ésser perseguides davant dels Tribunals de Justícia sota l'empar
de la legislació civil, penal i administrativa nacional i internacional.

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other
confidential information protected under the laws of and other
territories. if you are not one of the intended recipients of the
message, you are legally obliged to delete the message content.
Furthermore, you are kindly requested to report immediately the incident
to the sender.

Breach of confidentiality duties is a serious criminal offence in and
other territories. Offenders shall be legally prosecuted worldwide.

Thank you for your cooperation.
itamarnet@yahoo.com.br [shell-script]
2018-09-02 12:31:59 UTC
Permalink
Caro Bruno


Pegando carona nas sugestões do mestre Júlio e do grande Collons tenha essas considerações:


while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn $***@... mailto:***@... -fn $i -display \"${Nome1^} ${Resto^}\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"
done < pessoa.txt



Nesse caso funciona para os exemplos dados, que são bruno silva e luana dias, transformando em Bruno Silva e Luana Dias, mas se acaso o nome for composto por mais de 2 partes acredito que o ideal seria


while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn $***@... mailto:***@... -fn $i -display \"$(echo $Nome $Resto | sed -r 's/\b(.)/\U\1/g')\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"
done < pessoa.txt




Nesse caso um "bruno silva santos de oliveira" ficaria "Bruno Silva Santos De Oliveira"


nesse caso há o incoveniente do "De" ficar também com a primeira letra em maiúscula.


Espero que ajude.


[]'s
Itamar
brunodiasinfo@yahoo.com [shell-script]
2018-09-02 12:46:57 UTC
Permalink
Pessoal, estou muito grato pela ajuda de todos, estou cada vez melhorando no shell e tudo graças a ajuda de vocês.

Mas se me permitem uma ultima dúvida, poderiam me explicar como dunciona esse while (while read Nome1 Resto).


O que eu entendi é que ele vai ler Nome1 e Resto, do arquivo pessoas.txt, mas como ele sabe quem é Nome1 e quem é o Resto, pergunto pois se eu quisese colocar um telefone, como ele saberia quem é telefone?


Desde já muito obrigado pela ajuda.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-09-05 14:43:51 UTC
Permalink
Fala Bruno,
como eu que dei a solução que vc perguntou, tb darei a explicação resumida.

O X da questão não é o while... O while aqui, diferentemente de todas as
linguagens que conheço (e não são poucas), não faz um loop "enquanto uma
condição for verdadeira", mas sim "enquanto uma isntrução for bem sucedida"
e a instrução nesse caso é o read, que sempre será bem sucedido, exceto qdo
ler o EOF.

O read aceita a leitura de diversos campos para diversas variáveis, deste
que estes campos tenham entre si um caracteres definido na variável $IFS
(Inter Field Separator).

Já que eu falei no IFS, deixa eu pegar uma carona e mostrar um belo macete.
Suponha que você tenha uma variável chamada Frutas que tem o seguinte
*$ echo $Frutas*Pera^Uva^Maçã
Para separar rapidamente os campos sem o uso do cut ou de qualquer outro
*$ IFS=^*
*$ set $Frutas*
*$ echo $1*Pera
*$ echo $2*Uva
*$ echo $3*Maçã
Como pudemos ver, quando se usa o set $Frutas, os parâmetros posicionais
recebem os campos da variável Frutas, separados pelo IFS, assumindo cada um
o seu lugar correspondente à sua colocação na variável.
*$ set $(echo 10.11.12.13 | tr . ' ')*
*$ echo $2^$4*11^13
Outro macete irritantemente legal e simples, porém usando o comando read que
veremos no capítulo seguinte.
*$ read CoisaLinda1 CoisaLinda2 CoisaLinda3 <<< "Marina Neves Biasoli"*
*$ echo $CoisaLinda1*Marina
*$ echo $CoisaLinda2*Neves
*$ echo $CoisaLinda3*Biasoli
*$ IFS=+ read saudades1 saudades2 saudades3 <<< Hedy+Coutinho+Neves*
*$ echo $saudades1*Hedy
*$ echo $saudades2*Coutinho
*$ echo $saudades3*Neves
Usando desta forma, o IFS passou a ser o sinal de mais (+) somente para a
execução do read, voltando imediatamente ao conteúdo anterior.

O IFS tem por *default* <ESPAÇO>, <TAB> e <ENTER> , como o os nomes que
vc queria ler estavam separados por <ESPAÇO>, então tudo resolvido.

*PS: um boa parte desta resposta foi copiada da apostila do curso de Shell
(via EAD), cujas inscrições estão abertas (somente por mais 8 dias) e o
pessoal da lista tem 20% de desconto. Se alguém quiser mais detalhes, me
mande um e-mail em privado. O curso tem 5 aulas para tirar dúvidas (ao vivo
pela internet) e e-mail, Whats App e/ou Telegram para dúvidas urgentes..*
Abraços,
Julio

*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
* http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Pessoal, estou muito grato pela ajuda de todos, estou cada vez melhorando
no shell e tudo graças a ajuda de vocês.
Mas se me permitem uma ultima dúvida, poderiam me explicar como dunciona
esse while (while read Nome1 Resto).
O que eu entendi é que ele vai ler Nome1 e Resto, do arquivo pessoas..txt,
mas como ele sabe quem é Nome1 e quem é o Resto, pergunto pois se eu
quisese colocar um telefone, como ele saberia quem é telefone?
Desde já muito obrigado pela ajuda.
'T.Collons' t.collons@gmail.com [shell-script]
2018-09-02 17:57:34 UTC
Permalink
Hola Julio y Itamarnet


Mi versión de BASH es *GNU bash, version 4.3.48(1)-release
(x86_64-pc-linux-gnu), *y si uso vuestro código no consigo que la
variable $i me de nada, para obtener los nombres tengo que cambiar
$Nome1 por $i, es un problema de mi versión?.


Resultado del código de Julio, de Pere, de Itamarnet

Versió Julio

dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @vivaopinguim.com -fn 
-display *Bruno* -desc "Recursos Humanos" -pwd "***@123" -mustchpwd
yes -disable no
dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @vivaopinguim.com -fn 
-display *Luana* -desc "Recursos Humanos" -pwd "***@123" -mustchpwd
yes -disable no
dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @vivaopinguim.com -fn 
-display *Pere* -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes
-disable no


Versió Pere

dsadd user cn=*bruno*,ou=RH,dc=vivaopinguim -samid *bruno* -upn
*bruno*@vivaopinguim.com -fn *bruno* -display *bruno silva* -desc
"Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=*luana*,ou=RH,dc=vivaopinguim -samid *luana* -upn
*luana*@vivaopinguim.com -fn *luana* -display *luana dias* -desc
"Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no
dsadd user cn=*Pere*,ou=RH,dc=vivaopinguim -samid *Pere* -upn
*Pere*@vivaopinguim.com -fn *Pere* -display *Pere dels grans noms i
roures* -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes -disable no


Versió Itamarnet

dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @... -fn -display
"*Bruno Silva*" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes
-disable no
dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @... -fn -display
"*Luana Dias*" -desc "Recursos Humanos" -pwd "***@123" -mustchpwd yes
-disable no
dsadd user cn=,ou=RH,dc=vivaopinguim -samid  -upn @... -fn -display
"*Pere Dels Grans Noms I Roures*" -desc "Recursos Humanos" -pwd
"***@123" -mustchpwd yes -disable no

fichero pessoa.txt contiene

*bruno silva
luana dias
Pere dels grans noms i roures*
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros
se houverem
do
    echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn
-disable no"
done < pessoa.txt
*PS: O workshop de Shell das dicas-l
<http://www.dicas-l.com.br/educacao/workshop/> começa hoje e é
gratuito! Inscrições em **http://www.dicas-l.com.br/educacao/workshop/
<http://www.dicas-l..com.br/educacao/workshop/>*
Abraços,
Julio
*» Não tem tempo para fazer um curso presencial?*
*» Na sua cidade não tem nenhum bom curso de Linux?*
*» **Conheça nosso portal educacional e estude conosco: *
*     http://www.dicas-l.com.br/educacao
<http://www.dicas-l.com.br/educacao/>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
*em http://bit.ly/cursoshelljulioneves *
*
*
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
*
*
Prezados bom dia,
Antes de começar, se colar esse conteúdo num TXT ficará melhor
para ler ele.
Estou tentando formatar um txt com nomes e sobrenomes (somente
para iniciar), eu tenho que pegar esses nomes e sobrenomes e
coloca-los de uma forma, que irá gerar um script, para rodar num
server Windows e criar os usuários, são cerca de 200 usuário, no
teste deixei apenas 2 para facilitar.
Eu fiz de duas formas, a primeira usando apenas um FOR, mas sem
sobrenome, o que é ruim caso eu queira adicionar sobrenome,
OBs.: Arquivo "pessoa.txt" tem 2 nomes, bruno silva e luana dias.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Usando FOR para pegar cada nome e colocar onde é $i
for i in $nome
do
echo "dsadd user cn=$i,ou=RH,dc=vivaopinguim -samid $i -upn
\"$(echo $i | sed -r 's/(.)/\U\1/')\" -desc \"Recursos Humanos\"
done
###########################################################################################################################
# A expressão abaixo vai deixar a primeira letra em Maiúscula
\"$(echo $i | sed -r 's/(.)/\U\1/')\"
___________________________________________________________________________________________________________________________
dsadd user cn=bruno,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Esse funciona bem, porém, caso eu precise adicionar mais dados,
como informei acima, não vou conseguir.
___________________________________________________________________________________________________________________________
Segunda forma tentei usar um FOR encadeado.
###########################################################################################################################
#!/bin/bash
# Pega o primeiro campo do arquivo pessoas (vai pegar o primeiro nome das pessoas)
nome="$(awk '{ print $1 }' pessoas.txt)"
# Pega o segundo nome das pessoas, seria um sobrenome no caso,
estou dando REV para pegar o ultimo nome pego o nome e depois dou
um REV para voltar ao normal
sobrenome="$(rev pessoas.txt | awk '{ print $1 }' | rev)";
for i in $nome
do
        for a in $sobrenome
        do
        echo "dsadd user cn=$i 20653,ou=RH,dc=vivaopinguim -samid
-mustchpwd yes -disable no"
        done
done
###########################################################################################################################
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Ele mescla os sobrenomes.
___________________________________________________________________________________________________________________________
dsadd user cn=bruno 20653,ou=RH,dc=vivaopinguim -samid bruno -upn
-mustchpwd yes -disable no
dsadd user cn=luana 20653,ou=RH,dc=vivaopinguim -samid luana -upn
-mustchpwd yes -disable no
Teriam alguma dica para me ajudar, lembrando que tem telefones,
ramal e muitas outras opções, desde já, muito obrigado pela sua ajuda.
--
Pere

***@gmail.com <mailto:***@gmail.com>



<https://www.google.com/>

------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges
d'empresa i altre informació confidencial tutelada per les lleis de
Europea i altres estats, Si VostÚ el rep per error o sense ser una de
les persones esmenades a la capçalera, haurà de destruir-lo sense
copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el
contingut del missatge i notificar-ho per correu electrònic a l'emissor
del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat
podran ésser perseguides davant dels Tribunals de Justícia sota l'empar
de la legislació civil, penal i administrativa nacional i internacional.

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other
confidential information protected under the laws of and other
territories. if you are not one of the intended recipients of the
message, you are legally obliged to delete the message content.
Furthermore, you are kindly requested to report immediately the incident
to the sender.

Breach of confidentiality duties is a serious criminal offence in and
other territories. Offenders shall be legally prosecuted worldwide.

Thank you for your cooperation.
itamarnet@yahoo.com.br [shell-script]
2018-09-02 18:47:18 UTC
Permalink
Grande amigo Collons


Você tem toda razão, eu e o Julio cometemos o mesmo erro ao focar no nome em maiúsculo e acabamos esquecendo das outras ocorrẜncia na linha. O certo seria:


while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
echo "dsadd user cn=${Nome1},ou=RH,dc=vivaopinguim -samid ${Nome1} -upn ${Nome1}@... mailto:***@... -fn ${Nome1} -display \"${Nome1^} ${Resto^}\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"
done < pessoa.txt



ou



while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
echo "dsadd user cn=${Nome1},ou=RH,dc=vivaopinguim -samid ${Nome1} -upn ${Nome1}@... mailto:***@... -fn ${Nome1} -display \"$(echo ${Nome1} ${Resto} | sed -r 's/\b(.)/\U\1/g')\" -desc \"Recursos Humanos\" -pwd \"***@123\" -mustchpwd yes -disable no"
done < pessoa.txt






E pode usar o $i no lugar de $Nome1 ou ao contrário sem problemas nenhum, apenas o uso foi para deixar claro o significado da variável.


Obrigado pelo aviso


[]'s
Itamar
'T.Collons' t.collons@gmail.com [shell-script]
2018-09-02 20:41:30 UTC
Permalink
Caro Itamarnet


Obrigado pelo seu esclarecimento.
Post by ***@yahoo.com.br [shell-script]
Grande amigo Collons
Você tem toda razão, eu e o Julio cometemos o mesmo erro ao focar no
nome em maiúsculo e acabamos esquecendo das outras ocorrẜncia na
while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
    echo "dsadd user cn=${Nome1},ou=RH,dc=vivaopinguim -samid ${Nome1}
yes -disable no"
done < pessoa.txt
ou
while read Nome1 Resto # $Nome1 recebo o 1o. nome e $Resto os outros se houverem
do
    echo "dsadd user cn=${Nome1},ou=RH,dc=vivaopinguim -samid ${Nome1}
${Nome1} ${Resto} | sed -r 's/\b(.)/\U\1/g')\" -desc \"Recursos
done < pessoa.txt
E pode usar o $i no lugar de $Nome1 ou ao contrário sem problemas
nenhum, apenas o uso foi para deixar claro o significado da variável.
Obrigado pelo aviso
[]'s
Itamar
--
Pere

***@gmail.com <mailto:***@gmail.com>



<https://www.google.com/>

------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges
d'empresa i altre informació confidencial tutelada per les lleis de
Europea i altres estats, Si VostÚ el rep per error o sense ser una de
les persones esmenades a la capçalera, haurà de destruir-lo sense
copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el
contingut del missatge i notificar-ho per correu electrònic a l'emissor
del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat
podran ésser perseguides davant dels Tribunals de Justícia sota l'empar
de la legislació civil, penal i administrativa nacional i internacional.

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other
confidential information protected under the laws of and other
territories. if you are not one of the intended recipients of the
message, you are legally obliged to delete the message content.
Furthermore, you are kindly requested to report immediately the incident
to the sender.

Breach of confidentiality duties is a serious criminal offence in and
other territories. Offenders shall be legally prosecuted worldwide.

Thank you for your cooperation.
Loading...