Prezado Diógenes Vargas de Bittencourt,
Encontrei algumas coisas que podiam ser melhoradas no seu script e coloquei abaixo,
caso tenha alguma duvida basta perguntar.
Primeiro ajuste.
JAMAIS armazene em arquivos dados que você não irá utilizar em uma posterior execução
do seu script. Quando você armazena esses dados além de deixar o script mais lendo, pois
ficará dependente do disco nas leituras e escritas, você ainda terá problemas com permissões
de arquivos, portanto é melhor deixar o conteúdo em uma variável.
PING1=$( $PING $ENDER1 -c $QTDEMSG )
PING2=$( $PING $ENDER2 -c $QTDEMSG )
Segundo ajuste.
O comando read possui um parametro que você pode usar para imprimir uma mensagem na
tela tornando o uso do echo desnecessário. Veja abaixo.
Isso
echo "Insira o primeiro endereco para verificacao: "; read ENDER1;
Vira isso
read -p "Insira o primeiro endereco para verificacao: " ENDER1
Terceiro ajuste.
Com o uso da função Menu você estava realizando muitas chamadas recursivas e isso poderia
gerar problemas em alguma ocasião para você, sendo assim modifiquei a estrutura para utilizar
um loop infinito de forma que conseguisse obter o mesmo resultado.
Quarto ajuste.
Atente para a indentação do seu código.
Escrever um código bem indentado é tão importante quanto fazer um código funcional.
=========================== código =================================
#!/usr/bin/env bash
#variaveis (parte 1)
QTDEMSG="0"
#codigo
clear
echo ""
read -p "Insira o primeiro endereco para verificacao: " ENDER1
read -p "Insira o segundo endereco para verificacao: " ENDER2;
read -p "Quantas mensagens ICMP enviadas? " QTDEMSG;
echo 'Processando...'
PING1=$(ping $ENDER1 -c $QTDEMSG)
PING2=$(ping $ENDER2 -c $QTDEMSG)
echo 'Processamento concluído.'
#variaveis (parte 2)
PCTENV1=`echo -e "$PING1" |grep packets |awk '{print $1}'`
PCTENV2=`echo -e "$PING2" |grep packets |awk '{print $1}'`
PCTRCV1=`echo -e "$PING1" |grep received |awk '{print $4}'`
PCTRCV2=`echo -e "$PING2" |grep received |awk '{print $4}'`
PCTLOSS1=`echo -e "$PING1" |grep loss |awk '{print $6}' |awk -F'%' '{print $1}'`
PCTLOSS2=`echo -e "$PING2" |grep loss |awk '{print $6}' |awk -F'%' '{print $1}'`
RTT1=`echo -e "$PING1" |grep rtt |awk '{print $4}' |awk -F'/' '{print $1}' |awk -F'.' '{print $1}'`
RTT2=`echo -e "$PING2" |grep rtt |awk '{print $4}' |awk -F'/' '{print $1}' |awk -F'.' '{print $1}'`
while true; do
clear
echo ""
echo "1 - A quantidade de pacotes enviados"
echo "2 - A quantidade de pacotes recebidos"
echo "3 - Menor perda percentual"
echo "4 - Menor tempo de RTT"
echo "5 - Sair"
echo -e "Escolha uma das opcoes: \c"
read OPCAO
case $OPCAO in
1)
echo "====================================================="
echo "Segue abaixo pacotes enviados: "
echo "$ENDER1 teve $PCTENV1 pacotes enviados"
echo "$ENDER2 teve $PCTENV2 pacotes enviados"
echo "====================================================="
;;
2)
echo "====================================================="
echo "Segue abaixo pacotes recebidos: "
echo "$ENDER1 teve $PCTRCV1 pacotes recebidos"
echo "$ENDER2 teve $PCTRCV2 pacotes recebidos"
echo "====================================================="
;;
3)
if [ $PCTLOSS1 -le $PCTLOSS2 ]; then
echo ""
echo "O % de perda do $ENDER1 de $PCTLOSS1% eh menor que o do $ENDER2 que eh $PCTLOSS2%!"
echo ""
else
echo ""
echo "O % de perda do $ENDER2 de $PCTLOSS2% eh menor que o do $ENDER1 que eh $PCTLOSS1%!"
echo ""
fi
;;
4)
if [ $RTT1 -le $RTT2 ]; then
echo ""
echo "O RTT $RTT1 do $ENDER1 eh menor que o do $ENDER2 que eh $RTT2!"
echo ""
else
echo ""
echo "O RTT $RTT2 do $ENDER2 eh menor que o do $ENDER1 que eh $RTT1!"
echo ""
fi
;;
5)
exit 0
unset $ENDER1 $ENDER2 $QTDEMSG
;;
*)
echo "Opcao invalida"
unset $ENDER1 $ENDER2 $QTDEMSG
;;
esac
done