[Ajuda]Shell Script para trocar dados do Interfaces

Iniciado por Markkus, 24 de Junho de 2009, 14:04

tópico anterior - próximo tópico

Markkus

Olá pessoal!

Meu problema é o seguinte,estou criando um script com telas no Whiptail, já consigo capturar o que o user digita, agora queria saber como fazer para substituir no arquivo interfaces o IP original pelo digitado, somente na linha escolhida, já esta config. para escolher a interface escrita.

Obrigado desde já.


att: Markkus

raidicar

Abaixo segue um script que acabei de fazer para o seu caso afim de reconfigurar a rede, como nunca usei o whiptail, usei o dialog (que acho bem melhor, além de permitir o uso do mouse em modo texto).
#!/bin/bash
# novoip = váriavel que armazena dados inseridos pelo usuário para configuração de ip
# como a submaskara e gateway devem ser sempre os mesmos, já que não levantou essa questão, já pré defini no script.
# obviamente o gateway, network, mascara, broadcast e ip deve ser alterado de acordo com a sua rede.
novoip=$(
dialog --stdout --inputbox 'Informe aqui quao o ip a ser definido' 10 53 "" )
echo "auto eth0" > /etc/network/interfaces
echo "iface eth0 inet static" >> /etc/network/interfaces
echo "address $novoip" >> /etc/network/interfaces
echo "netmask 255.255.255.0" >> /etc/network/interfaces
echo "network 192.168.0.0" >> /etc/network/interfaces
echo "broadcast 192.168.0.255" >> /etc/network/interfaces
echo "gateway 192.168.0.1" >> /etc/network/interfaces
dialog --yesno 'Restartar a rede ?' 0 0
if [ $? = 0 ]; then
/etc/init.d/networking restart
                             clear
dialog --msgbox 'Processo terminado' 5 30
else
dialog --msgbox 'Processo terminado' 5 30
fi
dialog                             \
--title '----Nova configuração' \
--textbox /etc/network/interfaces  \
13 40

Não sei onde joga o IP digitado pelo usuário, mas se joga em um arquivo com o nome de, por exemplo, novoip.txt, a linha que especifica o ip ficaria assim:
echo "address `cat novoip.txt`" >> /etc/network/interfaces

Agora, para substituir uma linha de um arquivo por outro texto, utilize o comando sed.
Um lugar bom para saber como o comando sed funciona é este site: http://br.geocities.com/cesarakg/sed-1.html#append.
São 3 paginas falando do comando, leia a parte 2 e parte 3 que verá exemplos de substituição.
Tem muito mais exemplos na net, então, nem vou me alongar nele, é só googlar que acha fácil.

Tem algumas coisas que podem influenciar o seu script utilizando o comando sed, por exemplo, dependendo da distro, o arquivo que contém a configuração do ip pode estar em outro lugar e seu conteúdo estar disposto de forma diferente, na verdade, o conteúdo do arquivo interfaces pode variar e os dados não estarem dispostos de forma idêntica em todos os micros, isso impede de apenas utilizar o sed para substituir uma determinada linha,  seria necessário utilizar o grep em conjunto com o sed, ou seja, não bastaria apenas uma substituição, seria necessário localizar a linha antes para não jogar o ip encima do gateway, por exemplo.

Acredito que esteja utilizando o ubuntu, onde o arquivo a configuração de ip está em /etc/network/interfaces, por isso dei esse caminho como exemplo, mas não sei como está o arquivo interfaces do usuário, então, dependendo do tamanho e quantidade de micros, não basta apenas alterar o IP, o ideal seria refazer o interfaces a cada troca de IP, que é o que o script acima faz, porém eu utilizaria o sed. De uma pesquisada.
Você decide.
Boa sorte.

Quem ama extremamente, deixa de viver em si e vive no que ama. Na vida três coisas são certas, o amor, a morte e o Linux !
Se Platão disse, então realmente sofremos de uma perigosa doença mental.

clcampos

Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!