Script [RESOLVIDO]

1. Script [RESOLVIDO]

João Vitor Marques
vitor_newtec

(usa Debian)

Enviado em 04/06/2013 - 10:52h

Como tenho várias estações Linux, estou criando um script para facilitar a vida dos estagiários na hora de colocar o ip e renomear a máquina, porém não consigo fazer a estrutura de decisão do script funcionar. Se puderem me ajudar ficarei grato.

#!/bin/bash

clear
dmesg | grep eth
echo " ESCOLHA A INTERFACE: (EX: eth0)"
read INTERFACE
echo "IP:"
read IP
echo "MÁSCARA DE SUBREDE:"
read MASCARA
echo "GATEWAY:"
read GW
echo "DNS PRIMÁRIO:"
read DNS1
echo "DNS SECUNDÁRIO:"
read DNS2
echo "NOME DO PDV:"
read HOSTNAME

echo "CONFIGURAÇÃO:"
echo "INTERFACE:" $INTERFACE
echo "IP:" $IP
echo "MASCARA:" $MASCARA
echo "GATEWAY:" $GW
echo "DNS1:"$DNS1
echo "DNS2:"$DNS2
echo "NOME DA MÁQUINA:"$HOSTNAME


echo "As informações estão corretas ? (S/N)"
read RESPOSTA
RESPOSTA = "S"

if [$RESPOSTA = S] || [$RESPOSTA = s]
then
echo "AS CONFIGURAÇÕES SERÃO APLICADAS"
echo " " > /etc/hostname
sed -i "1s/^/$HOSTNAME\n/" /etc/hostname

echo " " > /etc/network/interfaces
echo auto $INTERFACE >> /etc/network/interfaces
echo iface $INTERFACE inet static >> /etc/network/interfaces
echo address $IP >> /etc/network/interfaces
echo netmask $MASCARA >> /etc/network/interfaces
echo gateway $GW >> /etc/network/interfaces

echo "nameserver $DNS1" >> /run/resolvconf/resolv.conf
echo "nameserver $DNS2" >> /run/resolvconf/resolv.conf

else
if [$RESPOSTA = N] || [$RESPOSTA = n]
then
begin

fi
fi



  


2. Script

Daniel Zaia Manzano
dzm_linux

(usa Debian)

Enviado em 04/06/2013 - 14:25h

Amigo,

Vamos lá...

O script em si tem uma boa ideia, mas na minha opinião, alguns detalhes podem torná-lo mais fácil de entender:

1. Ao invés de usar a dupla "echo ; read"
Ex.
echo "Digite algo: "
read ALGO

Use o parâmetro -p de "read"
Ex.
read -p "Digite algo: " ALGO

2. Ao invés de apagar o conteúdo de um arquivo com um espaço em branco
Ex.
echo " " > /etc/network/interfaces

Você pode usar o parâmetro -n de "echo"
Ex.
echo -n > /etc/network/interfaces
Ou ainda, de forma mais simplificada
Ex.
> /etc/network/interfaces

Agora, a correção em si :)

*

echo "As informações estão corretas ? (S/N)"
read RESPOSTA
RESPOSTA = "S"


Aqui ocorre ambiguidade! Se você espera receber uma resposta do usuário, não faz sentido definir você mesmo a variável $RESPOSTA.
Portanto, apague a linha "RESPOSTA = "S"

*

else
if [$RESPOSTA = N] || [$RESPOSTA = n]
then
begin


Não há necessidade de se colocar um "if" para tratar a resposta "n", pois já é esperado que, se a resposta não for sim, será não. :)

Além do mais, o termo "begin" não tem valia neste script, visto que não é um comando, nem uma função. Recomendo que você simplesmente remova eles. Caso a resposta da variável seja não, você pode fazer com que o script simplesmente termine, e o usuário tenha que iniciar novamente.

Em resumo, seu script ficaria assim:


#!/bin/bash
...
...
if [$RESPOSTA = S] || [$RESPOSTA = s]
then
...
...
...
else
echo "O script será encerrado!"
fi


Espero ter ajudado.
Caso tenha mais dúvidas, não hesite em postar.

Abraços


3. Script

João Vitor Marques
vitor_newtec

(usa Debian)

Enviado em 04/06/2013 - 15:39h

Primeiramente muito obrigado pelas ideias, pesquisei sobre elas e são realmente muito mais práticas.

Só fiquei com uma dúvida, no caso, se a resposta for não, eu quero que o script se inicie novamente, como devo fazer ?


4. Erro

João Vitor Marques
vitor_newtec

(usa Debian)

Enviado em 04/06/2013 - 15:58h

Caminhando no sentido do que você me passou ficou assim:

echo "As informações estão corretas ? (S/N)"
read RESPOSTA

if [$RESPOSTA = S] || [$RESPOSTA = s]
then
echo "AS CONFIGURAÇÕES SERÃO APLICADAS"
echo " " > /etc/hostname
sed -i "1s/^/$HOSTNAME\n/" /etc/hostname

echo " " > /etc/network/interfaces
echo auto $INTERFACE >> /etc/network/interfaces
echo iface $INTERFACE inet static >> /etc/network/interfaces
echo address $IP >> /etc/network/interfaces
echo netmask $MASCARA >> /etc/network/interfaces
echo gateway $GW >> /etc/network/interfaces

echo "nameserver $DNS1" >> /run/resolvconf/resolv.conf
echo "nameserver $DNS2" >> /run/resolvconf/resolv.conf

else
echo "SCRIPT ENCERRADO"
fi




Porém estou recebendo o erro:

LINE 33: [s: command not found


5. Script

Daniel Zaia Manzano
dzm_linux

(usa Debian)

Enviado em 05/06/2013 - 11:34h

Amigo,

1. Os testes condicionais envolvendo colchetes "[]", devem obedecer a seguinte sintaxe:

Errado:

[$var -eq 1]


Correto:

[ $var -eq 1 ]


Observe que os "espaços" são obrigatórios.

Para mais informações, consulte:
$ man [

2. Para que, caso a resposta seja "não", conseguimos fazer o script iniciar novamente usando o laço de repetição "while", como a seguir:


#!/bin/bash

while [ 1 -eq 1 ]
do
...
if [ $resposta = s ]
then
...
...
...
exit
fi
...
done


Esta estrutura faz com que, caso a resposta seja "sim", ele execute os comandos e ao final termine o script. Mas se a resposta for "não", ele volta ao início do script.

Faça os testes, e se possível, poste os resultados.

Abraços




6. DEU CERTO

João Vitor Marques
vitor_newtec

(usa Debian)

Enviado em 05/06/2013 - 14:17h

PERFEITO !!!

MUITO OBRIGADO PELA AJUDA.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts