newtonJr.
(usa CentOS)
Enviado em 01/07/2009 - 12:11h
Nelio, funcionou na lata. Gostaria, se possivel, que você continuasse a me orientar em outras operações nesse script. Depois, se quiser, podemos publicar no site para ajudar outras pessoas.
Preciso fazer as seguintes tarefas para cada linha desse arquivo: um ftp (operação put) e
a execução de um comando via telnet (com esse arquivo como parametro) na maquina remota.
Eis a cara o script até agora:
#!/bin/bash
# PARA CADA SUBESTAÇÃO EXECUTAR OS COMANDOS VIA TELNET
cat /export/home/sage/TAGO/INFO/INFO-SUBEST.txt | while read linha; do
subestacao=`echo $linha | awk {'print $1'}`
ip1=`echo $linha | awk {'print $2'}`
ip2=`echo $linha | awk {'print $3'}`
login=`echo $linha | awk {'print $4'}`
senha=`echo $linha | awk {'print $5'}`
base=`echo $linha | awk {'print $6'}`
echo $subestacao
echo $ip1
echo $login
echo $senha
echo $base
ftp -in
passive
open $subestacao
user $login $senha
bin
bye
EOF
done
Porém na hora de executar o script com ftp, aparece o seguinte erro:
sage@srv-sl-03:~/TAGO > ./script-vivaolinux.sh
LI
192.168.43.14
sage
sage
semi
?Invalid command
?Invalid command
?Invalid command
?Invalid command
?Invalid command
./script-vivaolinux.sh: line 30: passive: command not found
./script-vivaolinux.sh: line 32: user: command not found
./script-vivaolinux.sh: line 33: bin: command not found
INFO parametros.sh script-telnet-teste.sh substring.sh
juntatudo.sh relacao.sh script-vivaolinux.sh users.sh
musica-super-mario.sh result-telnet.txt shells.sh zerado.sh
./script-vivaolinux.sh: line 35: bye: command not found
./script-vivaolinux.sh: line 36: EOF: command not found
Nesse ftp, tenho que enviar um arquivo para a subestação.
Esse arquivo tem o nome no seguinte formato:
SIM_[subestacao].txt. Ex: SIM_IZ.txt, SIM_PD.txt, SIM_LD.txt, etc.
A parte do ftp teria que ter essa cara:
ftp -in
passive
open $subestacao
user $login $senha
bin
----------------
PUT "SIM_" & subestacao & ".txt" ---- Como concatenar em shell ?
----------------
bye
EOF
A outra tarefa é realizar duas operações via telnet (para cada máquina) e obter o resultado dessas operações.
A primeira tarefa é obter o resultado do comando date tanto da maquina local (a que roda o script)
quanto da maquina remota ($ip1 ou $ip2) e adicionar cada resultado em um arquivo.
Eis como era o código que tinha feito em vb.net:
Telnet1.Send("telnet " + config.IPSCADA_CORPRIMARIO + " -l " + login_cor + vbCrLf)
' s = Telnet1.WaitFor("Password")
' Debug.WriteLine(s.ToString)
' Telnet1.Send(senha_cor + vbCrLf)
' s = Telnet1.WaitFor(PROMPT)
' Debug.WriteLine(s)
' Telnet1.Send("date" + vbCrLf)
' s = Telnet1.WaitFor(PROMPT)
' Debug.WriteLine(s)
' s = s.Remove(0, 5)
' s = s.Split("@")(0).Remove(31, 5).Trim
' Debug.WriteLine(s)
' date_cor = ("SCD" + "; " + s + ";")
Depois que a varredura no arquivo tivesse sido completada, o resultado seria um
arquivo (SUBEST_DATES_jun0309.txt) com os seguintes dados, onde SCD é a máquina local:
SCD; Qua Jun 3 09:22:33 BRT 2009; LI; Qua Jun 3 09:42:54 BRT 2009;
SCD; Qua Jun 3 09:22:39 BRT 2009; LD; Qua Jun 3 09:21:04 GMT 2009;
SCD; Qua Jun 3 09:22:47 BRT 2009; PR; Qua Jun 3 09:22:49 WET 2009;
SCD; Qua Jun 3 09:22:57 BRT 2009; PD; Qua Jun 3 09:22:58 BRT 2009;
SCD; Qua Jun 3 09:23:05 BRT 2009; IZ; Qua Jun 3 09:23:07 BRT 2009;
SCD; Qua Jun 3 09:23:20 BRT 2009; CH; Qua Jun 3 09:23:22 BRT 2009;
Dei uma pesquisada na net, e montei o seguinte código em shell:
(
sleep 5
echo "sage";
sleep 2;
echo "sagesage";
sleep 2;
echo "ls -lh";
sleep 2;
echo "ps aux | grep alr";
sleep 2;
echo "quit";
) | telnet 192.168.43.11
A outra questão é que preciso obter o resultado do comando "ps aux | grep alr" e verificar
se esse resultado tem ou não a presença de um certo padrão. Ex:
sage@srv-sl-01:~/sage > ps aux | grep alr
sage 10267 0.0 0.0 3884 608 pts/4 S+ 12:04 0:00 grep alr
sage 19139 0.0 0.9 45288 9848 pts/3 S Jun20 3:39 /export/home/sage/sage/bin/Linux_x86/ems/alr tr
sage 19141 0.0 0.1 26612 1168 pts/3 S Jun20 0:10 /export/home/sage/sage/bin/Linux_x86/ems/alr tr
sage 19159 0.0 0.0 16516 460 pts/3 S Jun20 0:00 /export/home/sage/sage/bin/Linux_x86/ems/alr tr
E eu fizer o comando "ps aux | grep alr" na maquina remota e o resultado acima aparecer, então vou utilizar o ip1 para me comunicar com as subestações, caso contrário, vou me comunicar através do ip2.
Em vb.net, eu fazia da seguinte forma:
Seg = Telnet1.Send("psax | grep alr" + vbCrLf)
' s = Telnet1.WaitFor(PROMPT)
' Debug.WriteLine(s)
' If s.Contains("alr tr") Then
' flag = True
' Else
' flag = False
' End If
Como fazer essa operação com telnet em shell script?
Nelio, não quero abusar da sua boa vontade, uma vez que você já me ajudou muito.
O problema é que tenho que entregar esse script antes de entrar de férias. Além disso, creio que ele pode
ajudar outras pessoas, haja vista que o mesmo realiza várias tarefas. Fico no aguardo on-line,. Att.