Arquivo de e-mail somente após conter 20 linhas [fechadas]

0

Comecei recentemente a trabalhar para uma empresa muito pequena e estou tentando economizar tempo automatizando o processo de entrada de inventário dos roteadores Mikrotik, que eles colocam em cada lar de clientes para serem usados como "Dmarc" ou lar Roteador Wi-Fi. Os roteadores são ordenados 5 caixas de cada vez e vêm em caixas de 20. Inicialmente, eles têm uma configuração indesejável fora da caixa, bem como FirmWare desatualizado. Até lá, a empresa passava horas por dia fazendo login em cada roteador e removendo a configuração pronta para uso e substituindo-a pela configuração que funciona para a empresa, Atualizando o FirmWare, adicionando o dispositivo à sua prateleira. inventário. Eu escrevi o script a seguir para fazer login em um lote de roteadores (atualmente posso fazer 6 de cada vez) e executar essas ações. Preciso de ajuda para adicionar um loop if para aguardar que a "folha de inventário" contenha 20 linhas antes de enviá-lo por e-mail para ser adicionado ao inventário. Este script é executado a cada 16 minutos ... Código:

#!/bin/bash
while true
do
echo $(date "+%F %T") : starting script >> Script_timer.log
#Scans for new Mikrotiks to configure on the office LAN
mactelnet -lB > targetsfull.inv &

# Gets PID of scanning activity
PID=$!

#wait 5 seconds
sleep 5

#end scan
kill $PID

#Grab MAC addresses from scan info into file called targetsMAC.inv
grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' targetsfull.inv > targetsMAC.inv

#Run Expect Script on every MAC address in targetsMAC.inv and adds them to CompleteRouters.inv ( Records Serial Number and MAC address of eth1 for each router and replaces factory config with company default config

/home/michael/hAPRtRMAC.sh



#Formats list of serial numbers and MAC addresses into 2 columns "serialnumber,MACaddress"
xargs -n2 < CompleteRouters.inv >> InventoryConfigsComplete.inv

#places a comma between the serial number and MAC address 
sed -i "s/ /,/g" InventoryConfigsComplete.inv

#removes Duplicate Lines and saves to new file
awk '!seen[$0]++' InventoryConfigsComplete.inv > InventoryConfigsEmail.inv

A resposta do Kamaraj se conecta bem e funciona bem

FILE_NAME=InventoryConfigsEmail.inv

NUM_OF_LINES=$(wc -l < ${FILE_NAME})

if [ "${NUM_OF_LINES}" -ge "20" ]
then
    echo "Triggering Inventory Complete Email"
    mail -s "Inventory Configs Complete" [email protected] < "${FILE_NAME}"
    mv *.inv safezone/
    touch CompleteRouters.inv
    touch InventoryConfigsComplete.inv
    touch InventoryConfigsEmail.inv

else
    echo "${NUM_OF_LINES} Routers Complete" >> ChangeTheBatch.inv 
fi
echo $(date "+%F %T") :script ended >> Script_timer.log
sleep 960
done
    
por Michael Conrad Halls 24.01.2017 / 07:52

1 resposta

3

este script verifica a linha numérica de /tmp/my.log e, se for maior ou igual a 20, enviará um e-mail

#!/bin/bash

FILE_NAME=/tmp/my.log

NUM_OF_LINES=$(wc -l < ${FILE_NAME})

if [ "${NUM_OF_LINES}" -ge "20" ]
then
    echo "Triggering Email"
    mail -s "Log" [email protected] < "${FILE_NAME}"
else
    echo "Log file contains ${NUM_OF_LINES} lines"
fi
    
por 24.01.2017 / 07:58