20行が含まれている場合にのみファイルを電子メールで送信してください。 [閉じる]

20行が含まれている場合にのみファイルを電子メールで送信してください。 [閉じる]

私は最近非常に小さな会社で働き始め、「Dmarc」または家庭用WiFiルーターとして使用するために各顧客の自宅に配置するMikrotikルーターの在庫処理プロセスを自動化して時間を節約しようとしています。ルーターは一度に5箱(箱あたり20個)で注文されます。最初はデフォルト設定が最適ではなく、ファームウェアが古くなっていました。私がそこに到着する前に、会社は1日に数時間ごとに各ルーターにログインし、デフォルト設定を削除し、会社に適した設定に交換し、ファームウェアを更新し、デバイスを棚に追加しました。リスト。私はルータの配置(現在は一度に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以上の場合はEメールを送信します。

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

おすすめ記事