Por favor me ajudem Problemas de shell script que não consigo resolver [RESOLVIDO]

1. Por favor me ajudem Problemas de shell script que nγo consigo resolver [RESOLVIDO]

arthur victor franco de arruda
vfraanco

(usa Ubuntu)

Enviado em 11/11/2019 - 18:57h

Bom pessoal, o que eu vou pedir não é muito honesto mas é por necessidade, tenho que entregar um trabalho com problemas resolvidos sobre shell script, porém tudo isso veio em uma semana nada boa, o meu avô que é a pessoa que me subsidia e cuida de mim faleceu ontem e agora estou sem ninguém, não consigo pensar nem estudar para resolver a lista de exercício e salvar o meu semestre pelo menos, por favor se alguém poder me ajudar eu fico imensamente grato só quem perdeu alguém sabe o que estou sentindo.

os problemas propostos foram:
Ping Sweeper Script
---o Script deve receber como parametro um ficheiro contendo uma lista com os endereços ipv4 que devem ser testados
---caso nao seja passa do parametro e deve ser solicitado ao utilizador um ficheiro
---testar se o parammetro indicado é relamente um ficheiro, caso contrario essa informação deve ser apresentada ao utilizador e outro ficheiro deve ser pedido no maximo 3 vezes antes de terminar o programa
---antes de realizar o ping o script deve verificar se a linha do ficheiro que ira testar tem o formato de um endereço ipv4 ]
---o comando utilizado para testar o ipv4 é: ping -c 1 endereço_ipv4.
---sempre que o comando retorna dentro da String de resposta o texto '100% packt loss' podem considerar que o teste falhou.
---o script deve criar um ficheiro designado reachability_test.txt contendo a seguinte informação
a. quantidade e lista de endereços ativos
b.quantidade e lista de endereços inativos
c.quantidade e lista de endereços inválidos

por favor me ajudem.


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/11/2019 - 22:39h

vfraanco escreveu:

Bom pessoal, o que eu vou pedir não é muito honesto mas é por necessidade, tenho que entregar um trabalho com problemas resolvidos sobre shell script, porém tudo isso veio em uma semana nada boa, o meu avô que é a pessoa que me subsidia e cuida de mim faleceu ontem e agora estou sem ninguém, não consigo pensar nem estudar para resolver a lista de exercício e salvar o meu semestre pelo menos, por favor se alguém poder me ajudar eu fico imensamente grato só quem perdeu alguém sabe o que estou sentindo.

os problemas propostos foram:
Ping Sweeper Script
---o Script deve receber como parametro um ficheiro contendo uma lista com os endereços ipv4 que devem ser testados
---caso nao seja passa do parametro e deve ser solicitado ao utilizador um ficheiro
---testar se o parammetro indicado é relamente um ficheiro, caso contrario essa informação deve ser apresentada ao utilizador e outro ficheiro deve ser pedido no maximo 3 vezes antes de terminar o programa
---antes de realizar o ping o script deve verificar se a linha do ficheiro que ira testar tem o formato de um endereço ipv4 ]
---o comando utilizado para testar o ipv4 é: ping -c 1 endereço_ipv4.
---sempre que o comando retorna dentro da String de resposta o texto '100% packt loss' podem considerar que o teste falhou.
---o script deve criar um ficheiro designado reachability_test.txt contendo a seguinte informação
a. quantidade e lista de endereços ativos
b.quantidade e lista de endereços inativos
c.quantidade e lista de endereços inválidos
por favor me ajudem.


Boa noite vfraanco,
Sei o que é isso, infelizmente perdi minha esposa recentemente...

Bom, voltando ao script, está pronto....
Se não tem o argumento como parâmetro, avisa,
Se o arquivo é vazio, avisa
Solicita um arquivo válido por 3 vezes, depois encerra.
Checa os IPs com uma REGEX, se é válido, pinga....
Para "pegar" o resultado do ping, usei:
if ping -c1 ip;then
OK
else
Not OK
fi
Mais pratico do que buscar pelo texto '100% packt loss' ...
Emite Relatório:
Exemplo:
———————————————————————————————————————
Data: 12-11-2019 Hora: 22:13:33
———————————————————————————————————————
Total de IPs do Arquivo: 7
———————————————————————————————————————

ATIVOS: 4
192.168.1.1
192.168.1.2
8.8.8.8
54.233.68.155

INATIVOS: 2
192.168.1.9
192.168.1.3

INVÁLIDOS: 1
192.168.1.555
———————————————————————————————————————


Script:
#!/bin/bash
#Ping Script#
clear;
saida="reachability_test.txt";
count=0;
ip_ativo=0;
ip_inativo=0;
ip_invalido=0;


INICIO(){
if [[ $1 && -s $1 ]];then
arq=$1;
TESTA_ARQ;
else
zenity --timeout="2" --warning --text '<span foreground="red" font="16">Informe o Arquivo Contendo os IPs.\nUso: "'$0' arquivo.txt"</span>' 2>/dev/null
SOLICITA_LISTA
fi
}

TESTA_ARQ(){
if [ -s $arq ];then
TESTAEPINGA
else
zenity --timeout="2" --warning --text '<span foreground="red" font="16">Parâmetro/Arquivo Inválido."</span>' 2>/dev/null
SOLICITA_LISTA
fi
}

SOLICITA_LISTA(){
for ((n=1;n<=3;n++));do
arq=$(zenity --title "[Count $n] Informe um Arquivo Válido Contendo os IP's" --file-selection --file-filter=*.txt 2>/dev/null);
[[ $arq && -s $arq ]] && { TESTAEPINGA;break;} || continue
done
(($n>3)) && echo -e " Número de tentativas esgotado\n Saindo";

}

TESTAEPINGA(){
nips=$(wc -l < ${arq});
while read ip;do
let count++;
printf "\e[33;1m\e[2;$((($(tput cols)-39)/2))f$(LINHA)\n\
\e[3;$((($(tput cols)-23)/2))f** Processando %02d/%02d **\n\
\e[4;$((($(tput cols)-39)/2))f$(LINHA)\e[m\n" $count ${nips}
if grep -Eq "^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$" <<< "$ip";then
if ping -c1 $ip &>/dev/null;then
let ip_ativo++; #Contador
ativo[$ip_ativo]="$ip" #Gera Array "ativo" usando o contador como indice
else
let ip_inativo++;
inativo[$ip_inativo]="$ip ";
fi
else
let ip_invalido++;
invalido[$ip_invalido]="$ip"
fi;
done<${arq}
echo -e "\n** Gerando Relatório **";
sleep 1;
printf "\n$(LINHA)\nData: %(%x %tHora: %X)T\n$(LINHA)\n\
Total de IPs do Arquivo: ${count}\n$(LINHA)\n\
\nATIVOS: $ip_ativo\n$(printf "%s\n" ${ativo[@]})\n\
\nINATIVOS: $ip_inativo\n$(printf "%s\n" ${inativo[@]})\n\
\nINVÁLIDOS: $ip_invalido\n$(printf "%s\n" ${invalido[@]})\n\
$(LINHA)\n" > $saida
wait;
cat ${saida};
}

LINHA() {
printf '%*s' "39" ''|sed "s/ /—/g"
}

INICIO $1
#A LINHA ACIMA FAZ PARTE DO SCRIPT

Espero que tenha uma boa nota e supere . . .
Especificamente, neste caso, "o tempo é o melhor remédio",
Aprendemos a conviver com a ausência de quem amamos....
OBS.: Não esqueça de Marcar como Resolvido e também a MELHOR RESPOSTA....
———————————————————————————————————————
Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver
———————————————————————————————————————


3. Re: Por favor me ajudem Problemas de shell script que nγo consigo resolver [RESOLVIDO]

arthur victor franco de arruda
vfraanco

(usa Ubuntu)

Enviado em 13/11/2019 - 08:41h

msoliver escreveu:

vfraanco escreveu:

Bom pessoal, o que eu vou pedir não é muito honesto mas é por necessidade, tenho que entregar um trabalho com problemas resolvidos sobre shell script, porém tudo isso veio em uma semana nada boa, o meu avô que é a pessoa que me subsidia e cuida de mim faleceu ontem e agora estou sem ninguém, não consigo pensar nem estudar para resolver a lista de exercício e salvar o meu semestre pelo menos, por favor se alguém poder me ajudar eu fico imensamente grato só quem perdeu alguém sabe o que estou sentindo.

os problemas propostos foram:
Ping Sweeper Script
---o Script deve receber como parametro um ficheiro contendo uma lista com os endereços ipv4 que devem ser testados
---caso nao seja passa do parametro e deve ser solicitado ao utilizador um ficheiro
---testar se o parammetro indicado é relamente um ficheiro, caso contrario essa informação deve ser apresentada ao utilizador e outro ficheiro deve ser pedido no maximo 3 vezes antes de terminar o programa
---antes de realizar o ping o script deve verificar se a linha do ficheiro que ira testar tem o formato de um endereço ipv4 ]
---o comando utilizado para testar o ipv4 é: ping -c 1 endereço_ipv4.
---sempre que o comando retorna dentro da String de resposta o texto '100% packt loss' podem considerar que o teste falhou.
---o script deve criar um ficheiro designado reachability_test.txt contendo a seguinte informação
a. quantidade e lista de endereços ativos
b.quantidade e lista de endereços inativos
c.quantidade e lista de endereços inválidos
por favor me ajudem.


Boa noite vfraanco,
Sei o que é isso, infelizmente perdi minha esposa recentemente...

Bom, voltando ao script, está pronto....
Se não tem o argumento como parâmetro, avisa,
Se o arquivo é vazio, avisa
Solicita um arquivo válido por 3 vezes, depois encerra.
Checa os IPs com uma REGEX, se é válido, pinga....
Para "pegar" o resultado do ping, usei:
if ping -c1 ip;then
OK
else
Not OK
fi
Mais pratico do que buscar pelo texto '100% packt loss' ...
Emite Relatório:
Exemplo:
———————————————————————————————————————
Data: 12-11-2019 Hora: 22:13:33
———————————————————————————————————————
Total de IPs do Arquivo: 7
———————————————————————————————————————

ATIVOS: 4
192.168.1.1
192.168.1.2
8.8.8.8
54.233.68.155

INATIVOS: 2
192.168.1.9
192.168.1.3

INVÁLIDOS: 1
192.168.1.555
———————————————————————————————————————


Script:
#!/bin/bash
#Ping Script#
clear;
saida="reachability_test.txt";
count=0;
ip_ativo=0;
ip_inativo=0;
ip_invalido=0;


INICIO(){
if [[ $1 && -s $1 ]];then
arq=$1;
TESTA_ARQ;
else
zenity --timeout="2" --warning --text '<span foreground="red" font="16">Informe o Arquivo Contendo os IPs.\nUso: "'$0' arquivo.txt"</span>' 2>/dev/null
SOLICITA_LISTA
fi
}

TESTA_ARQ(){
if [ -s $arq ];then
TESTAEPINGA
else
zenity --timeout="2" --warning --text '<span foreground="red" font="16">Parâmetro/Arquivo Inválido."</span>' 2>/dev/null
SOLICITA_LISTA
fi
}

SOLICITA_LISTA(){
for ((n=1;n<=3;n++));do
arq=$(zenity --title "[Count $n] Informe um Arquivo Válido Contendo os IP's" --file-selection --file-filter=*.txt 2>/dev/null);
[[ $arq && -s $arq ]] && { TESTAEPINGA;break;} || continue
done
(($n>3)) && echo -e " Número de tentativas esgotado\n Saindo";

}

TESTAEPINGA(){
nips=$(wc -l < ${arq});
while read ip;do
let count++;
printf "\e[33;1m\e[2;$((($(tput cols)-39)/2))f$(LINHA)\n\
\e[3;$((($(tput cols)-23)/2))f** Processando %02d/%02d **\n\
\e[4;$((($(tput cols)-39)/2))f$(LINHA)\e[m\n" $count ${nips}
if grep -Eq "^(((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))\.){3}((1[0-9]|[1-9]?)[0-9]|2([0-4][0-9]|5[0-5]))$" <<< "$ip";then
if ping -c1 $ip &>/dev/null;then
let ip_ativo++; #Contador
ativo[$ip_ativo]="$ip" #Gera Array "ativo" usando o contador como indice
else
let ip_inativo++;
inativo[$ip_inativo]="$ip ";
fi
else
let ip_invalido++;
invalido[$ip_invalido]="$ip"
fi;
done<${arq}
echo -e "\n** Gerando Relatório **";
sleep 1;
printf "\n$(LINHA)\nData: %(%x %tHora: %X)T\n$(LINHA)\n\
Total de IPs do Arquivo: ${count}\n$(LINHA)\n\
\nATIVOS: $ip_ativo\n$(printf "%s\n" ${ativo[@]})\n\
\nINATIVOS: $ip_inativo\n$(printf "%s\n" ${inativo[@]})\n\
\nINVÁLIDOS: $ip_invalido\n$(printf "%s\n" ${invalido[@]})\n\
$(LINHA)\n" > $saida
wait;
cat ${saida};
}

LINHA() {
printf '%*s' "39" ''|sed "s/ /—/g"
}

INICIO $1
#A LINHA ACIMA FAZ PARTE DO SCRIPT

Espero que tenha uma boa nota e supere . . .
Especificamente, neste caso, "o tempo é o melhor remédio",
Aprendemos a conviver com a ausência de quem amamos....
OBS.: Não esqueça de Marcar como Resolvido e também a MELHOR RESPOSTA....
———————————————————————————————————————
Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver
———————————————————————————————————————


Muito obrigado amigo de coração.
Como executo esse codigo?


4. Re: Por favor me ajudem Problemas de shell script que nγo consigo resolver

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/11/2019 - 17:20h

vfraanco escreveu:
Como executo esse código?

Abra o editor de texto de sua preferencia,
Selecione o código que "passei",
Copie, cole e salve na sua pasta de usuário (/home/seuusuario/)
Escolha um nome, exemplo:
Teste_Ping.sh
Dê permissão de execução,
No terminal, na pasta onde o script foi salvo, execute o comando:
chmod +x Teste_Ping.sh
Feito isso, no terminal, execute:
./Teste_Ping.sh arquivo_IP.txt 

OBS1.: PONTOBARRATeste_Ping.sh
OBS2.: O arquivo Com os IP's, deve ter um IP por LINHA, e a extensão deve ser .txt. Exemplo IPS.txt
OBS3.: Não esqueça de Marcar como Resolvido e também a MELHOR RESPOSTA....
Mais prático: Faça o download do Script:
https://drive.google.com/drive/folders/1JAhFfPCWs4DmY-vWicjzfXGRyhAG-SCf?usp=sharing 

Importante: echo -e "$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')"
Att.: Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts