различие по содержимому файла

278
Unix4fun

Я пытаюсь сделать различия в двух файлах и сравнить их содержимое, и если они отличаются, отправьте электронное письмо. Ниже мой сценарий, который я не могу заставить работать по какой-то причине. Любые предложения приветствуются.

#!/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 
0
Как это терпит неудачу? Что вы сделали для его устранения? tripleee 6 лет назад 3
Вам нужно `!`, Чтобы отменить проверку в операторе `if`, так как вы проверяете условие сбоя. dsstorefile1 6 лет назад 0
Используйте `set -x`, чтобы` bash` печатал каждую следующую команду. Таким образом, вы будете знать, что выполняется (примечание: команда для возврата к нормальному поведению - `set + x`, на случай, если вам это когда-нибудь понадобится). Kamil Maciorowski 6 лет назад 0

1 ответ на вопрос

-1
Sam

Попробуй это:

#!/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 "$: 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 "$: Data file has changed. Sent mail to $recipients" >> $log fi 
Синтаксис if if diff $ current $ new значительно предпочтительнее, чем diff; если [$? -eq 0] `так что на самом деле это не улучшение. Вообще говоря, имена файлов без кавычек тоже довольно нервируют. Смотрите также http://shellcheck.net/ для проверки синтаксиса. tripleee 6 лет назад 1
Похоже, это ответ [Попробуйте это!] (Https://meta.stackexchange.com/a/196188). Объясните, почему вы хотите, чтобы спрашивающий попробовал это и что вы изменили. Tiago Caldeira 6 лет назад 2

Похожие вопросы