[gelöst] Bash: Abfrage in eine Zeile zusammenfassen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Marmor626
Beiträge: 24
Registriert: 24.01.2010 08:54:41

[gelöst] Bash: Abfrage in eine Zeile zusammenfassen

Beitrag von Marmor626 » 18.10.2013 08:01:32

Hallo zusammen.

Ich habe ein Problem mit der Syntax in einer Bash.

Hier meine Aufgabenstellung:
Ich möchte den backuppc per cronjob steuern (hab ich schon gelöst).
Dazu habe ich einen Cron-job, der mir folgende Bash-Datei aufruft

Code: Alles auswählen

#/bin/bash
if [ "$(date +%w)" = "5" ]; then      #Wochentag aus Systemzeit extrahieren und Freitag (5) abfragen
auszuführender backuppc-Befehl
fi
Das ganze kann man auch kürzer gestalten und direkt in die Crontab stellen.

Code: Alles auswählen

0 10 1-7 * * root ["$(date +%w)" = "5"] && auszuführender backuppc-Befehl
Jetzt mein Problem.
ich habe ein etwas komplexeres Bash-File

Code: Alles auswählen

#!/bin/bash
#Auslesen Wochentag
WOCHENTAG=`date +%w`
#Auslesen Monatgstag
MONATSTAG=`date +%d`
#echo "Heute ist der $MONATSTAG, der $WOCHENTAG Tag der Woche"
if [[ $MONATSTAG -ge 1 && $MONATSTAG -le 7 && $WOCHENTAG -eq 5 ]]; then
  auszuführender Backuppc-Befehl full backup
else
  auszuführender Backuppc-Befehl inkrementales Backup
fi
exit 0
Die Frage:
Könnte man sowas auch in eine Zeile packen und direkt in die Crontab setzen?
Die Abfragen für
"1. Tag im Monat oder mehr" und "7. Tag im Monat oder weniger" und "Wochentag ist Freitag"
(sehe gerade, die erste Abfrage "1. Tag und höher" könnte ich weglassen ... )
kann ich mit && verketten und würde mit dann auch den Befehl für das Vollbackup ausführen.

Bekomme ich aber auch die Else-Anweisung für das inkrementelle mit rein?

Bei Befehlen (z.B.: ping) kann ich ja "Erfolg" und "Misserfolg" mit || trennen.

Bei obigen einzeiler klappt das irgendwie nicht. Kann man die Anweisung auch noch komplett Klammern?
Irgendwie bekomme ich das nicht hin.
Wäre für Eure Hilfe echt dankbar.

Gruß
Robert Kraus
Zuletzt geändert von Marmor626 am 18.10.2013 09:14:57, insgesamt 1-mal geändert.

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: Bash: Abfrage in eine Zeile zusammenfassen

Beitrag von uname » 18.10.2013 08:09:28

Vollkommen ungetestet und nur als Idee:

Code: Alles auswählen

0 10 1-7 * * root [ $(date +%d) -ge 1 && $(date +%d) -le 7 && $(date +%w) -eq 5 ] && auszuführender Backuppc-Befehl full backup || auszuführender Backuppc-Befehl inkrementales Backup
Offen:
- Vielleicht doch mehr geschachtelte eckige Klammern da mehrfache Abfrage, gefühlt eher nicht
- bin mir nicht sicher mit den Abfragen in den eckigen Klammern ob sie wirklich korrekt sind (inkl. deiner geplanten Logik)
- evtl. müssen einzelne Zeichen in CRON escaped werden, ich nutze kein CRON
- persönlich würde ich wohl eher ein Programm vorziehen

Schau auch hier: http://debianforum.de/forum/viewtopic.php?t=145393

Marmor626
Beiträge: 24
Registriert: 24.01.2010 08:54:41

Re: Bash: Abfrage in eine Zeile zusammenfassen

Beitrag von Marmor626 » 18.10.2013 09:14:41

Hallo uname.

Danke für Deine Antwort.

Ich habe hier im Forum wirklich gesucht, aber nichts gefunden. Dass ich nach "cronjob vereinfachen" oder so suchen könnte, hab ich verpeilt - hab mich irgendwie auf "Bash" als Suchbegriff festgenagelt.

Aktuell funktioniert meine Sache mit der Bash-Datei recht gut, war nur die Frage, ob man dass Klammern kann.
Hatte schon einige Versuche gemacht, hat aber nie funktioniert.
Dank Deiner Hilfe (und Deinem Link) habe ich jetzt das Skript zum laufen gebracht.
Hatte die falschen Klammern verwendet.

Bedanke mich herzlich für Deine Hilfe.

Gruß
Robert Kraus

uname
Beiträge: 12403
Registriert: 03.06.2008 09:33:02

Re: [gelöst] Bash: Abfrage in eine Zeile zusammenfassen

Beitrag von uname » 18.10.2013 09:34:02

Über den Suchbegriff "cron" hättest du es auch gefunden. Wurde nämlich gerade in den letzten zwei Tagen diskutiert ;-)

Antworten