lame_duck_hat
(usa Outra)
Enviado em 27/03/2008 - 15:48h
Infelizmente não dá pra testar perfeitamente seu script aqui, já que não tenho as pastas e arquivos e ele usa.
Quando testei ele apontou outros erros aqui, e nenhum erro que você citou.
Vou mostrar alguns possíveis erros no script, tente mudá-lo e veja se funciona:
Na linha:
if [ ${vt[$n]} == 21/tcp ];
Se não me engano o comando test "[ ]" quando testa string usa apenas um sinal de igual, em muitas vezes é necessário colocar tanto a variável quanto o valor a ser comparado entre aspas.
Deveria ficar:
if [ "${vt[$n]}" = "21/tcp" ];
-----------
Na linha:
then {ping -c 3 $i > ping; n++};
Não deveria estar entre colchetes os comandos após o then.
Deveria ser.
then ping -c 3 $i > ping; n++;
---------------
O mesmo para as linhas:
elif [ ${vt[$n]} == 53/udp ]; # incrementa índice
then {ping -c 3 $i >> ping; n++};
deveriam ser:
elif [ "${vt[$n]}" = "53/udp" ];
then ping -c 3 $i >> ping; n++;
-----------------------
Modifiquei o script, não sei se está tudo certo se quiser testar direto, tente aqui:
P=$(cat IP); # arquivo IP contém endereços IP à serem scaneados
for i in $P;
do
cd $i; # vai p\ diretório previamente criado de nome igual ao IP do host
declare -a vt=$(cat IP_$i); # define, para cada IP, um vetor que terá suas portas ativas
n=0; # inicializa o índice do vetor que representa cada porta
if [ "${vt[$n]}" = "21/tcp" ]; # verifica se elemento combina c\ padrão 21/tcp
then ping -c 3 $i > ping; n++; # se sim dá ping e armazena em arquivo, no mesmo bloco
elif [ "${vt[$n]}" = "53/udp" ]; # incrementa índice
then ping -c 3 $i >> ping; n++;
else echo "Nada" >> ping;
cd ..; # sai do diretório referente ao IP
fi
done
-----
Tenho escrito uma apostila de Shell, caso interesse ler:
http://patinhofaminto.awardspace.com/tutorial.php