Utilização do comando FOR [RESOLVIDO]

1. Utilização do comando FOR [RESOLVIDO]

Stenio Cordeiro de Paula
stenioc1

(usa Red Hat)

Enviado em 26/01/2015 - 10:53h

Bom dia galera do VOL,

Estou uma dúvida, não achei o que eu fiz de errado nesse script, quero que ele pegue uma lista, com os campos NOME:EMAIL:LOGIN:SENHA e crie um arquivo utilizando esses itens como variaveis:

A lista de criação (EXEMPLO):
Alexandre De Oliveira:alexandrede.oliveira@email.com:login:senha

O script que eu fiz é este:

#!/bin/bash
> teste
for VAR in `cat lista|grep -v :.z....:`;do

echo $VAR
EMAIL=`grep $VAR lista|cut -d: -f2`
NAME=`grep $VAR lista|cut -d: -f1`
LOGIN=`grep $VAR lista|cut -d: -f3`
PASSWORD=`grep $VAR lista|cut -d: -f4`

echo "newusr ($LOGIN) name('$NAME - $EMAIL') password($PASSWORD) audit(FAILURE LOGINSUCCESS LOGINFAILURE) unix (gecos('$NAME - $EMAIL') pgroup('Suporte_Unix') shellprog('/usr/bin/bash') homedir('/export/home/$LOGIN'))" >> teste;
done

O problema é que quando vejo o arquivo gerado, ele duplica as saidas, alguém poderia me dar uma luz ?

Grato




  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2015 - 11:35h

stenioc1 escreveu:

Bom dia galera do VOL,

Estou uma dúvida, não achei o que eu fiz de errado nesse script, quero que ele pegue uma lista, com os campos NOME:EMAIL:LOGIN:SENHA e crie um arquivo utilizando esses itens como variaveis:

A lista de criação (EXEMPLO):
Alexandre De Oliveira:alexandrede.oliveira@email.com:login:senha

O script que eu fiz é este:

#!/bin/bash
> teste
for VAR in `cat lista|grep -v :.z....:`;do

echo $VAR
EMAIL=`grep $VAR lista|cut -d: -f2`
NAME=`grep $VAR lista|cut -d: -f1`
LOGIN=`grep $VAR lista|cut -d: -f3`
PASSWORD=`grep $VAR lista|cut -d: -f4`

echo "newusr ($LOGIN) name('$NAME - $EMAIL') password($PASSWORD) audit(FAILURE LOGINSUCCESS LOGINFAILURE) unix (gecos('$NAME - $EMAIL') pgroup('Suporte_Unix') shellprog('/usr/bin/bash') homedir('/export/home/$LOGIN'))" >> teste;
done

O problema é que quando vejo o arquivo gerado, ele duplica as saidas, alguém poderia me dar uma luz ?

Grato



Se dentro do arquivo for SOMENTE este padrão: <campo1>:<campo2>:<campo3>:<campo4>, então é mais fácil fazer com while, veja:

while IFS=':' read NOME EMAIL LOGIN SENHA; do
# implementa aqui seu código
echo -e "NOME: $NOME\nEMAIL: $EMAIL\nLOGIN: $LOGIN\nSENHA: $SENHA"
done <lista


- -
~ ru4n

3. Re: Utilização do comando FOR

Renan Arantes
R3nan

(usa Debian)

Enviado em 26/01/2015 - 11:13h

não seria colocar o ultimo echo fora do for ? ficando assim


#!/bin/bash
> teste
for VAR in `cat lista|grep -v :.z....:`;do
echo $VAR
EMAIL=`grep $VAR lista|cut -d: -f2`
NAME=`grep $VAR lista|cut -d: -f1`
LOGIN=`grep $VAR lista|cut -d: -f3`
PASSWORD=`grep $VAR lista|cut -d: -f4`
done

echo "newusr ($LOGIN) name('$NAME - $EMAIL') password($PASSWORD) audit(FAILURE LOGINSUCCESS LOGINFAILURE) unix (gecos('$NAME - $EMAIL') pgroup('Suporte_Unix') shellprog('/usr/bin/bash') homedir('/export/home/$LOGIN'))" >> teste;



4. Re: Utilização do comando FOR [RESOLVIDO]

Stenio Cordeiro de Paula
stenioc1

(usa Red Hat)

Enviado em 26/01/2015 - 11:50h


Obrigado ru4n,

Tinha pensado nisso, mas não estava entendendo a lógica, agora entendi, funcionou perfeitamente :-)
Agradeço ao R3nan pela atenção tb

Obrigado.


5. Re: Utilização do comando FOR [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/01/2015 - 11:51h

stenioc1 escreveu:

Bom dia galera do VOL,

Estou uma dúvida, não achei o que eu fiz de errado nesse script, quero que ele pegue uma lista, com os campos NOME:EMAIL:LOGIN:SENHA e crie um arquivo utilizando esses itens como variaveis:

A lista de criação (EXEMPLO):
Alexandre De Oliveira:alexandrede.oliveira@email.com:login:senha

O script que eu fiz é este:

#!/bin/bash
> teste
for VAR in `cat lista|grep -v :.z....:`;do

echo $VAR
EMAIL=`grep $VAR lista|cut -d: -f2`
NAME=`grep $VAR lista|cut -d: -f1`
LOGIN=`grep $VAR lista|cut -d: -f3`
PASSWORD=`grep $VAR lista|cut -d: -f4`

echo "newusr ($LOGIN) name('$NAME - $EMAIL') password($PASSWORD) audit(FAILURE LOGINSUCCESS LOGINFAILURE) unix (gecos('$NAME - $EMAIL') pgroup('Suporte_Unix') shellprog('/usr/bin/bash') homedir('/export/home/$LOGIN'))" >> teste;
done

O problema é que quando vejo o arquivo gerado, ele duplica as saidas, alguém poderia me dar uma luz ?

Grato




O comando 'for' é para iterar por itens não por linhas, para iterar por linhas utilize o 'while'. Para o comando 'for' cada item é separado por um espaço em branco, no arquivo de exemplo, você tem três itens:

1. Alexandre
2. De
3. Oliveira:alexandrede.oliveira@email.com:login:senha

É estranho também que você refaça o grep dentro do arquivo ao invés de tentar utilizar a informação que deveria estar em $VAR (prefira variáveis em minúsculo). Ainda que corrigida, a abordadem utilizada é extremamente ineficiente. Segue um exemplo mais fácil de manter:

#!/bin/bash

while IFS=$':\n' read name email login password; do
arr=( \
"newusr ($login)" \
"name('$name - $email')" \
"password($password)" \
"audit(FAILURE LOGINSUCCESS LOGINFAILURE)" \
"unix" \
"(gecos('$name - $email')" \
"pgroup('Suporte_Unix')" \
"shellprog('/usr/bin/bash')" \
"homedir('/export/home/$login'))" \
)
echo "${arr[@]}"
unset arr
done < lista > teste








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts