แตกต่างกับเนื้อหาของไฟล์


0

ฉันกำลังพยายามทำไฟล์สองไฟล์ที่แตกต่างกันและเปรียบเทียบเนื้อหาและถ้ามันต่างกันก็ส่งอีเมล์ ด้านล่างเป็นสคริปต์ของฉันที่ฉันไม่สามารถทำงานด้วยเหตุผลบางอย่าง ข้อเสนอแนะใด ๆ ยินดีต้อนรับ

#!/bin/bash
# This script alert.sh runs every hour in cron
# Created march 15, 2018 Author Dave Taylor

# Variables
frm="Datafile-Monitor@mycompany.com"

# For testing email and script
recipients="dave@mycompany.com"


# This is the Data file checked every Midnight for website results done by curdata.sh script. Results go to the curfile.fil
current=/scripts/results/curfile.fil

# This is the NEW data output file where website is checked every hour done by newdata.sh script. Results go to the datafile.fil
new=/scripts/results/datafile.fil

dpd=`cat /scripts/results/datafile.fil`
dte=`/bin/date`


# check if the contents of the file has changed since midnight.

    if diff $current $new &>/dev/null

        then

# Log it
    echo "$dte" >> /var/log/datapod
    echo "Data file is $dpd" >>  /var/log/datafile

    else
# Create the message

    echo "Current STL Datafile has changed TO:$dpd" > /scripts/results/mesg

# send the email
    mail -s "Alert Data File has changed" -r "$frm" $recipients < /scripts/results/mesg

sleep 3

#Now we update the current data file with the most up to date info.
cat /scripts/results/datafile.fil > /scripts/results/curfile.fil
fi

3
มันล้มเหลวได้อย่างไร? คุณทำสิ่งใดเพื่อแก้ไขข้อบกพร่องแล้ว
tripleee

คุณต้อง a !เพื่อคัดค้านการตรวจสอบในifคำสั่งเนื่องจากคุณกำลังตรวจสอบเงื่อนไขความล้มเหลว
dsstorefile1

ใช้set -xเพื่อbashพิมพ์ทุกคำสั่งที่ตามมา วิธีนี้คุณจะรู้ว่าสิ่งใดที่ถูกดำเนินการ (หมายเหตุ: คำสั่งเพื่อกลับสู่พฤติกรรมปกติคือset +xในกรณีที่คุณต้องการสิ่งนี้)
Kamil Maciorowski

คำตอบ:


-1

ลองสิ่งนี้:

#!/bin/bash
frm="Datafile-Monitor@mycompany.com"
recipients="dave@mycompany.com"
current=/scripts/results/curfile.fil
new=/scripts/results/datafile.fil
log=/var/log/datafile
msgfile=/scripts/results/mesg
dte=`/bin/date`
diff $current $new &>/dev/null
if [ $? -eq 0 ];  then
    echo "${dte}: Data file is: $new " >>  $log
else
    echo "Current STL Datafile has changed TO: " > $msgfile
    cat $new >> $msgfile
    mail -s "Alert! Data File has changed" -r "$frm" $recipients < $msgfile
    sleep 3
    cat $new > $current
    echo "${dte}: Data file has changed. Sent mail to $recipients" >>  $log
fi

1
ไวยากรณ์if diff $current $newเป็นที่นิยมอย่างมากdiff; if [ $? -eq 0 ]ดังนั้นนี่ไม่ใช่การปรับปรุงจริง ๆ โดยทั่วไปแล้วชื่อไฟล์ที่ไม่ได้พูดก็ค่อนข้างน่ารำคาญเช่นกัน ดูเพิ่มเติมที่shellcheck.netเพื่อตรวจสอบไวยากรณ์
tripleee

2
นี่น่าจะลองนี่สิ! ตอบ. อธิบายว่าทำไมคุณจึงต้องการให้ผู้ถามลองทำสิ่งนั้นและสิ่งที่คุณเปลี่ยนไป
CaldeiraG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.