staging.inyokaproject.org

IF-Abfrage innerhalb eines Befehls?

Status: Ungelöst | Ubuntu-Version: Ubuntu 19.10 (Eoan Ermine)
Antworten |

RUDI-TERROR

Anmeldungsdatum:
17. September 2016

Beiträge: 4

Hallo zusammen,

ich habe für mir ein Backup-Script gebastelt und möchte zum Scriptende eine E-Mail mit dem Backup-Status verschicken.

Das Problem ist nun, dass ich 3 Log-Files anlege, wobei wenn keine Daten gesichert werden müssen, auch kein Log-File erzeugt wird.

Kann mir jemand bei der Syntax helfen, wie ich abfragen kann, ob die Datei exisitiert und nur wenn dem so ist in dem unten aufgeführten Befehl "-a $LOGx" eingefügt wird?

1
2
3
4
5
LOG1=/home/pi/Dateien/scripts/log/unison_datei1.log<
LOG2=/home/pi/Dateien/scripts/log/unison_datei2.log
LOG3=/home/pi/Dateien/scripts/log/unison_datei3.log

cat $MAILLOG | mutt -a $LOG1 -a $LOG2 -a $LOG3 -s "MAPI - Sicherung" -- $Mailempfaenger

Wenn ich den Befehl wie oben dargestellt ausführe und eine der LOG-Dateien fehlt, wird der mutt-Befehl mit einer Fehlermeldung (Datei existiert nicht) abgebrochen.

Vielen Dank!

Grüße, Rudi

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

1
help test

zeigt Dir, wie man auf die Anwesenheit von Dateien testet und solche Feinheiten wie die Unterscheidung ordinäre Datei/Verzeichnis, Datei nicht leer usw. Help ist ein Programm, das nur die entsprechende Sektion der Bash-Manpage aufruft - sehr praktisch, wenn man mal blätternd versucht hat, in man bash etwas zu finden.

Mit dem Kurzschließenden UND kann man so die ganze Option definieren und abfragen:

1
2
3
test -f checkroot && cr="-a checkroot" 
test -f checkbrot && cb="-a checkbrot" 
echo foobar $cr $cb 

Wenn jetzt log1, 2 und 3 leer sind weiß ich nicht, ob es dann dennoch aufgerufen werden soll - evtl. brauchst Du für den Fall noch einen extra Test.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Ich würde da nach Möglichkeit Arrays nutzen, statt Variablen-Namen hochzuzählen und per Parameter Expansion (vgl. https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion) prüfen, ob der Array befüllt wurde:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/bin/env bash
LOG1=/home/pi/Dateien/scripts/log/unison_datei1.log
LOG2=/home/pi/Dateien/scripts/log/unison_datei2.log
LOG3=/home/pi/Dateien/scripts/log/unison_datei3.log

logfiles=("$LOG1" "$LOG2" "$LOG3")

for f in "${logfiles[@]}"
do
    [ -r "$f" ] && [ -f "$f" ] || continue
    attachment_args+=('-a' "$f")
done

cat $MAILLOG | mutt ${attachment_args:+"${attachment_args[@]}"} -s "MAPI - Sicherung" -- $Mailempfaenger

RUDI-TERROR

(Themenstarter)

Anmeldungsdatum:
17. September 2016

Beiträge: 4

Zwei wirklich sehr interreassante Lösungsvorschläge, hat mir sehr weitergeholfen!

Vielen Dank euch beiden!

Antworten |