Dúvida FOR

1. Dúvida FOR

João Ricardo
ricardoschet

(usa Debian)

Enviado em 25/10/2012 - 13:02h

Estou fazendo um script de migração de emails
Preciso repetir diversos procedimentos por inúmeras vezes, para poder migrar as contas que desejo, mas algo está errado


a1=joao
a2=open

for (( i = 1; i <= 2; i++ ))
do

./mb2md -s /bkp_emails/$a$i -R -d /homex/mail/site.com.br/$a$i/Maildir/

done



Preciso pegar o conteúdo da variavel a1 na primeira iteração, na proxima iteração pegar o a2 e assim por diante ... substituindo $a$i pelo conteudo das variaveis, dentro do for ...

Como poderia fazer isso?


  


2. Re: Dúvida FOR

Paulo
paulo1205

(usa Ubuntu)

Enviado em 25/10/2012 - 15:07h

Supondo que você está usando o bash e os utilitários de linha de comando da GNU, você pode fazer algo como segue.

#!/bin/bash -

exec 3< <(find /bkp_emails -maxdepth 1 -type f -print)

while read source <&3; do
name=`basename "$source"`
mb2md -s "$source" -R -d "/homex/mail/site.com.br/${name}/Maildir/"
done

exec 3<&-


O exemplo acima supõe que todos os arquivos do diretório /bkp_emails devem ter o mesmo tratamento. Você não quiser isso, você ler de um arquivo contendo a lista de usuários que lhe interessam, substituindo a primeira linha exec pelo seguinte.

exec 3< arquivo_lista 


Mas existe como fazer exetamente o que você perguntou (e que me parece pior). Para tanto, você tem de executar o comando interno do shell eval. Veja o exemplo abaixo.

nome1=Paulo
nome2=Ana
for i in 1 2; do
eval echo \$nome$i
done



3. Re: Dúvida FOR

Perfil removido
removido

(usa Nenhuma)

Enviado em 25/10/2012 - 20:01h

ricardoschet escreveu:

Estou fazendo um script de migração de emails
Preciso repetir diversos procedimentos por inúmeras vezes, para poder migrar as contas que desejo, mas algo está errado


a1=joao
a2=open

for (( i = 1; i <= 2; i++ ))
do

./mb2md -s /bkp_emails/$a$i -R -d /homex/mail/site.com.br/$a$i/Maildir/

done



Preciso pegar o conteúdo da variavel a1 na primeira iteração, na proxima iteração pegar o a2 e assim por diante ... substituindo $a$i pelo conteudo das variaveis, dentro do for ...

Como poderia fazer isso?


Use scapes e eval


#!bin/bash
for i in {1..2}
do
eval "_FOO=\${a${i}}"
./mb2md -s /bkp_emails/${_FOO} -R -d /homex/mail/site.com.br/${_FOO}/Maildir/
done


Boa sorte!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts