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

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

Re: Dúvida com variáveis


From: Cristiano
Subject: Re: Dúvida com variáveis
Date: Tue, 13 Nov 2012 00:57:34 -0000
User-agent: eGroups-EW/0.82


--- Em address@hidden, Pedro Renato Martelotta <het_net@...> escreveu
>
> Pessoal,
> 
> Estava fazendo um script para enviar um arquivo para vários servidores. A
> dúvida é: como ler uma variével dentro de outra?
> Segue uma parte do código (está errado, é só pra clarear a dúvida):
> 
> ...
> *# Lista de servidores a receber o arquivo (13 servidores)
> SVR1=servidor20
> ...
> SVR12=servidor28
> SVR13=servidor50
> 
> # Localização do arquivo
> ARQ=/root/arquivo.txt
> 
> # Envio via SCP
> for i in $(seq 13)
>         do
>                 CONT=SVR${i}
>                 echo "Digite a senha para o servidor ${CONT}"
>                 scp ${ARQ} ${CONT}:/root/
>                 sleep 1
>         done*
> 
> Antes disso, tinha pensado em ${SVR${i}}, mas não funciona. Alguém entendeu
> o que quis fazer e poderia me ajudar?
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

Pedro, boa noite.

O que você está tentando fazer pode ser feito usando vetores (arrays). Porém, 
vetores não estão disponíveis para qualquer interpretador. Nem mesmo no bash 
eles existem em todas as versões (se não me falha a memória, só da 4.0 para 
frente).

Mas fazer o que você quer é muito mais simples, usando o while e o 
redirecionamento de entrada (<). Deste modo, você não precisa definir variáveis 
no arquivo que relaciona os servidores. Basta listar os endereços, tipo:

$ cat servidores.txt
servidor1
servidor2
...
servidorN

Com os arquivos nomeados linha por você pode fazer algo assim:

ARQ=/root/arquivo.txt
while read SERVER ; do
   echo "Digite a senha para o servidor ${SERVER}"
   scp ${ARQ} ${SERVER}:/root/
   sleep 1
done < servidores.txt

Outra maneira de fazer isso com o "for" seria lendo o conteúdo do mesmo arquivo 
servidores.txt (sem a atribuição de variáveis) à partir de uma subshell, tipo:

ARQ=/root/arquivo.txt
for SERVER in $(cat servidores.txt) ; do
   echo "Digite a senha para o servidor ${SERVER}"
   scp ${ARQ} ${SERVER}:/root/
   sleep 1
done

E, por fim, você consegue fazer isso sem ter que digitar senha, usando 
autenticação por par de chaves. Mas, para isso, teria que configurar cada 
servidor (/etc/ssh/sshd_config) para aceitar a autenticação por par de chaves, 
além de copiar, ao menos, a chave pública do usuário para o servidor de destino 
(em ~/.ssh).

Talvez configurar isso dê tanto ou mais trabalho que copiar manualmente os 
arquivos. Entretanto, dependendo da recorrência da replica dos arquivos, vale a 
pena configurar o acesso por chaves (além de ser muito mais seguro que a 
autenticação por senha).






reply via email to

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