20줄이 포함된 경우에만 파일을 이메일로 보내세요. [닫기]

20줄이 포함된 경우에만 파일을 이메일로 보내세요. [닫기]

저는 최근 아주 작은 회사에서 일하기 시작했고 "Dmarc" 또는 가정용 WiFi 라우터로 사용하기 위해 각 고객의 집에 배치하는 Mikrotik 라우터의 재고 처리 프로세스를 자동화하여 시간을 절약하려고 합니다. 라우터는 한 번에 5개 상자(상자당 20개)로 주문됩니다. 처음에는 기본 구성이 최적이 아니었고 펌웨어가 오래되었습니다. 내가 그곳에 도착하기 전에 회사는 하루에 몇 시간씩 각 라우터에 로그인하고 기본 구성을 제거하고 회사에 적합한 구성으로 교체하고 펌웨어를 업데이트한 다음 장치를 선반에 추가했습니다. 목록. 나는 라우터 배치(현재는 한 번에 6개를 수행할 수 있음)에 로그인하고 이러한 작업을 수행하기 위해 다음 스크립트를 작성했습니다. 이메일을 통해 인벤토리에 추가하기 전에 "인벤토리 테이블"에 20개의 행이 포함될 때까지 기다리는 if 루프를 추가하는 데 도움이 필요합니다. 스크립트는 현재 16분마다 실행됩니다... 코드:

#!/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

Kamaraj의 답변은 연결만으로 잘 작동합니다.

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

답변1

이 스크립트는 /tmp/my.log의 줄 번호를 확인하고 20보다 크거나 같으면 이메일을 보냅니다.

#!/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

관련 정보