grep Anfrage im if-Befehl

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
mosa
Beiträge: 324
Registriert: 29.10.2004 09:53:35

grep Anfrage im if-Befehl

Beitrag von mosa » 11.12.2020 18:42:38

Hallo, ich versuche eine if Abfrage zu erstellen in der folgender Befehl integriert werden soll
grep -rnwi /mnt/install/config/ws/sophie/backups/archiv/ -e' 11
Ausdruck:
/mnt/install/config/ws/sophie/backups/archiv/backup.log:14:/home/data wurde Archiviert Fr Dez 11 14:15:36 UTC 2020
Ziel ist es zu prüfen ob heute bereits ein Datenbackup von /home/data ausgeführt wurde.

Leider klappt es nicht :oops:
ui=grep -rnwi /mnt/install/config/ws/sophie/backups/archiv/ -e' 11

if [ find $ui $gi ]
then
echo "Wurde ausgefuehrt"
else
echo "Nicht vorhanden"
fi

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: grep Anfrage im if-Befehl

Beitrag von tobo » 11.12.2020 20:01:33

Mit grep -q unterdrückst du die Ausgabe und betrachtest einzig den Rückgabewert (gefunden oder nicht gefunden). In einem if angewendet z.B.

Code: Alles auswählen

if grep -q ...; then
...
fi
Also ohne (test-)Abfrage [ ... ].
grep sucht in und findet Dateien. find erwartet als ersten Parameter ein (Start-)Verzeichnis. Was genau willst du machen?

Benutzeravatar
mosa
Beiträge: 324
Registriert: 29.10.2004 09:53:35

Re: grep Anfrage im if-Befehl

Beitrag von mosa » 12.12.2020 10:06:29

Hallo @tobo
Dank Dir bin ich nun soweit:

gi=$(date +%d)
cd /mnt/install/config/ws/sophie/backups/archiv
if grep $gi -q backup.log
then
echo "HALLO, da bin ich"
else
echo "Error"
fi
und es kommt Error :)
> Was genau willst du machen?

Hintergrund ist, dass wenn ein neues Backup ausgeführt wurde mir eine Mail zugestellt werden soll.
Der Mail-Versand klappt auch, nur wird das Mail gleich mehrmals am gleichen Tag zugestellt (Anacron falsch?)
# Alle 0 Tage und 33-Minuten nachdem Sophie gestartet wurde
0 33 findupdate /mnt/install/config/ws/sophie/backups/local/findupdate

Fakt ist, der Mail-Versand funktioniert doch wird es mehremal am gleichen Tag zugestellt. Und immer im Bezug auf das gleiche Erreignis.
Hier der Ausdruck vom backup.log
/home/public wurde Archiviert Do Dez 10 08:09:08 UTC 2020
/home/share wurde Archiviert Do Dez 10 08:21:08 UTC 2020
/home/data wurde Archiviert Fr Dez 11 14:15:36 UTC 2020
/home/virtual wurde Archiviert Sa Dez 12 08:52:28 UTC 2020
:oops: die Uhrzeit???

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: grep Anfrage im if-Befehl

Beitrag von tobo » 12.12.2020 11:32:05

Theoretisch sollte dein Text sogar funtionieren - Er sucht nach dem heutigen Tag (12) und "sollte" "/home/virtual wurde Archiviert Sa Dez 12 08:52:28 UTC 2020" finden. Aber ja, er würde auch eine 12 bei den Sekunden finden. Falls du Einfluss auf das Datum in der Log-Datei hast, dann würde ich deutlich zu einem sortierbaren US-Datum raten und dann auch danach mittels grep suchen:

Code: Alles auswählen

$ date "+%a %F %T"
Sat 2020-12-12 11:23:55
Außerdem solltest du Variablen, wenn nicht ausdrücklich anders gewollt, gequotet weitergeben. Reduziert Fehler um 95%. Und Einrückungen machen einen Text deutlich besser lesbar.
Also ich würde dann etwa eine solche Log-Datei

Code: Alles auswählen

/home/public wurde Archiviert Do 2020-12-10 08:09:08
/home/share wurde Archiviert Do 2020-12-10 08:21:08
/home/data wurde Archiviert Fr 2020-12-11 14:15:36
/home/virtual wurde Archiviert Sa 2020-12-12 08:52:28
ungefähr so durchsuchen:

Code: Alles auswählen

LOG_FILE="/mnt/install/config/ws/sophie/backups/archiv/backup.log"

##Zeitstempel im Logfile erzeugt mit date "+%a %F %T"

gi="$(date "+%F")"
if grep "$gi" -q "$LOG_FILE"; then
    echo "HALLO, da bin ich"
else
    echo "Error"
fi

Benutzeravatar
mosa
Beiträge: 324
Registriert: 29.10.2004 09:53:35

Re: grep Anfrage im if-Befehl

Beitrag von mosa » 12.12.2020 16:42:30

:hail: @tobo
Datum wurde korrigiert.
Bleibt noch zu verhindern, dass ich x Mails pro Tag vom gleichen Ereignis bekomme.
Wie würdest du es lösen?

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: grep Anfrage im if-Befehl

Beitrag von tobo » 12.12.2020 18:47:03

mosa hat geschrieben: ↑ zum Beitrag ↑
12.12.2020 16:42:30

Bleibt noch zu verhindern, dass ich x Mails pro Tag vom gleichen Ereignis bekomme.
Wie würdest du es lösen?
x Mails bedeutet wohl, dass x Backups laufen (oder was bedeutet gleiches Ereignis)!? Stellt sich die Frage was stört?! Sollen die Backups mehrfach am Tag lauefen, aber nicht mehrfach E-Mails geschickt werden oder soll nur ein Backup pro Tag laufen?
# Alle 0 Tage und 33-Minuten nachdem Sophie gestartet wurde
0 33 findupdate /mnt/install/config/ws/sophie/backups/local/findupdate
0 = period und 33 ist delay. Bei der Periode entspricht die 1 täglich, 7= wöchentlich (alle 7 Tage), 30 monatlich und z.B. 23 alle 23 Tage. Die 0 ist undokumentiert, zumindest finde ich nichts darüber. Wenn der Job täglich nur einmal laufen soll, dann gehört dort eine 1 hin. Andernfalls sllltest du noch findupdate zeigen oder soll oben das schon grob das Skript darstellen?

Benutzeravatar
mosa
Beiträge: 324
Registriert: 29.10.2004 09:53:35

Re: grep Anfrage im if-Befehl

Beitrag von mosa » 13.12.2020 15:00:51

Vielen Dank @tobo
Habe der Anacron Befehl wie von Dir angemerkt verändert.
Seit 3 Stunden keine Mail mehr :)
Alles Gute und bleib Gesund

Antworten