Business Script was NAS herunterfährt, wenn das Backup erfolgreich ist?

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Wenn ich das richtig interpretiere möchtest du den Inhalt der Variable welches das Datum in welchem Format auch immer gespeichert hat einfach ausgeben.

Code:
# Zuweisung
var=$(date '+%b')
var=`date '+b%'`

# Ausgabe
echo $var
echo ${var}
echo "$var"
 

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
@luddi
Sorry für zuwenig Info. Was ich will ist folgendes:

Bash:
varCurentDate=date
Schreibt mir ja das Datum in die Variable "varCurentDate"
"varCurentMonth", soll mit "varCurentDate" und dem Zustaz "+%b" bspw. mit Feb befüllt werden. Daher dacht ich, ich könnte etwas in der folgenden Form schreiben und erhalte dann mein Ergebnis:
Bash:
varCurenMonth='varCurentDate +%b'
oder so... und ich erhalte nach Abfrage durch
Bash:
$varCurentMonth
Feb
Klar kann man das auch noch besser lösen, in dem ich schreibe:
Bash:
varCurenMonth='date +%b'
was das gleiche Ergebnis zur Folge hat. Ich dachte nur, ich könnte mit dem Wert aus varCurentDate weiterarbeiten.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Du kannst die Variable varCurentDate selbstverständlich weiterverwenden. Aber dir muss eins klar werden dass du hier ein kleinen Denkfehler hast. Man muss strikt trennen zwischen Komamndo ausführen und das Ergebnis einer Variable zuweisen oder eine Substitution erstellen indem man den Befehl einer Variable zuweist.

Mit dieser Syntax $(<COMMAND>) bzw. äquivalent `<COMMAND>` wird das entsprechende Kommando ausgeführt um das Ergebnis einer Variable zuweisen zu können.
Will man das Ergebnis des Kommandos einer Variable zuweisen dann funktioniert das wie folgt.
var=$(<COMMAND>) wie schon in Post #41 erwähnt.

Möchte man eine Subsitution erstellen, dann kann man den Befehl einer Variablen zuweisen wobei der Befehl noch nicht ausgeführt wird. Erst wenn die Variable ausgeführt wird d.h. man setzt das kommando der Variable ab und erhält erst zu diesem Zeitpunkt das Ergebnis.

Hier ein kleines Beispiel anhand des Datums welches das Verhalten zwischen Zuweisung des Ergebnisses und einer Substitution erläutern soll.

Code:
#!/bin/bash

# Zuweisung des Ergebnisses an eine Variable
dateScriptStart=$(date)
echo "$dateScriptStart"

# Substitution
varCurentDate=date
$varCurentDate
sleep 5
$varCurentDate
sleep 5
$varCurentDate

# Ausgabe des gespeicherten Ergebnis zu Beginn
echo "$dateScriptStart"

exit 0

Die Ausgabe liefert hier folgendes:
Code:
Thu Feb  2 21:42:40 CET 2023
Thu Feb  2 21:42:40 CET 2023
Thu Feb  2 21:42:45 CET 2023
Thu Feb  2 21:42:50 CET 2023
Thu Feb  2 21:42:40 CET 2023

Wie man hier erkennen kann, ist die erste und die letzte Ausgabe exakt der gleiche Zeitstempel weil das Kommando nur bei der Zuweisung der Variablen ausgeführt wird und am Ende mit dem Zugriff auf die Variable ausgegeben wird.
Der zweite Zeitstempel ist quasi dem ersten identisch weil hier nur ein paar Instructions von der Maschine ausgeführt werden und auf Sekunden gerundet das gleiche Ergebnis liefert.
Aber durch das sleep 5 Kommando wird die Ausführung des Scripts verzögert und bei dem jeweiligen Anwenden der Substitution wird das Kommando date ausgeführt. Und genau aus diesem Grund unterscheiden sich die Zeitstempel 2, 3 und 4 jeweils um exakt 5 Sekunden also um die Zeit um welches das Script mit der Ausführung jeweils verzögert wurde.

Ich hoffe nun mit diesem simplen Beispiel die hiermit verbunden Missverständnisse im Bezug auf Shell Scripting aufgeklärt zu haben.
 
  • Like
Reaktionen: Tommes

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Super erklärt @luddi (y) Wirklich top!
 

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
@luddi
Also im grundegenommen willst du mir sagen, dass ich zwar das "date" in eine Variable schreiben kann, aber im Anschluss ist es nicht möglich über "$varCurentDate" und "+%b" so zu manipulieren, dass bspw. Feb raus kommt.
Das ist erstmal nicht schlimm. Alternativen gibt es ja. wie bspw.:
Code:
'date +%b'
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Super erklärt @luddi (y) Wirklich top!
Danke @Tommes ✌️

[..] aber im Anschluss ist es nicht möglich über "$varCurentDate" und "+%b" so zu manipulieren, dass bspw. Feb raus kommt.
Nein das möchte ich nicht sagen.
Ich habe lediglich ein Beispiel gezeigt um dir zu verdeutlichen was der Unterschied zwischen Zuweisung eines Ergebnisses und die Verwendung einer Substitution ist.

Und jetzt kommen wir zu einen nächsten Beispiel, auch wenn ich immer noch nicht genau weiß was du von dem Datum denn später alles in welcher Form auch immer verwenden möchtest.

Du kannst dir jegliche Information welche das Kommando date liefert deinen Wünschen entsprechend formatieren und einzelne Teile davon jeweils einer Variable zuweisen die du später wiederum in einem andern Kontext werwenden möchtest.

Code:
#!/bin/bash

monatkurz=$(date '+%b')
monatlang=$(date '+%B')
wochentag=$(date '+%A')
tag=$(date '+%d')
monat=$(date '+%m')
jahr=$(date '+%Y')
stunde=$(date '+%H')
minute=$(date '+%M')
sekunde=$(date '+%S')


echo "Heute ist der $tag.$monat.$jahr"
echo "Today is $monat/$tag/$jahr."
echo
echo "Es ist $stunde:$minute:$sekunde Uhr."
echo
echo "Der Wochentag ist \"$wochentag\""
echo
echo "Der Monat ist \"$monatlang\" und in abgekürzter Form \"$monatkurz\""
echo
echo "Heute ist $wochentag, der $tag. Tag im Monat $monatlang und wir schreiben das Jahr $jahr."

exit 0

Die Ausgabe hierzu ist...
Code:
Heute ist der 02.02.2023
Today is 02/02/2023.

Es ist 23:29:29 Uhr.

Der Wochentag ist "Donnerstag"

Der Monat ist "Februar" und in abgekürzter Form "Feb"

Heute ist Donnerstag, der 02. Tag im Monat Februar und wir schreiben das Jahr 2023.

Entweder du versuchst jetzt einmal im Detail zu beschreiben was du vor hast bzw. erreichen möchtest oder du jongliertest selbst einmal mit den Variablen um die Shell (bash) Syntax zu vertiefen.
 

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
@luddi
Danke erstmal an alle.
Ich glaube wir sprechen aneinander vorbei. Das mit der Substitution ist das eine, ich habe versucht in Post 45 zu beschreiben was ich machen will. Aber ich denke ich habe nun selber meinen denkfehler erkannt. In der Variable "varCurentDate" ist nicht "date" als Befehl drinnen, sondern die Information die "date" liefern soll. Ich hatte versucht die Option "+%b" anzuhängen, um den Ausgabewert von "date" also die Information selbst ist in der Variable weiter zu manipulieren. In dem Fall auf bspw. "Feb" zu reduzieren, anstatt dem gesamten String von "date" nochmals in eine Variable schreiben zu wollen.

Ich hoffe das ist verständlicher.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Ich glaube wir sprechen aneinander vorbei.
Mit ganz großer Sicherheit...

Ich hoffe das ist verständlicher.
Nein ist es nicht.

ich habe versucht in Post 45 zu beschreiben was ich machen will
Du kannst varCurentDate auch im Nachhinein manipulieren aber ich glaube nicht dass dies zum Ziel führt.

Hier nochmals ein Beispiel für deinen expliziten Fall.
Code:
#!/bin/bash

varCurentDate='date'
$varCurentDate

varCurentDate=${varCurentDate}" +%b"
$varCurentDate

exit 0

Ausgabe ist dann wie folgt:
Code:
Fri Feb  3 09:39:12 CET 2023
Feb

Wie man sieht ist auch das möglich.
Aber jetzt stellen wir uns einmal die Frage wie macht man an dieser Stelle weiter wenn man die gleiche Variable nochmals umdefinieren möchte und anstatt das Format +%b jetzt den Wochentag mit +%A ausgeben möchte.
Denn die Variable varCurentDate beinhaltet aktuell diese Substitution ${varCurentDate}" +%b".

Wie möchtest du jetzt b mit A austauschen? Klar kann man machen mit z.B. sed - stream editor for filtering and transforming text.
Das würde dann rudimentär so aussehen:
Code:
varCurentDate=`echo "${varCurentDate}" | sed 's/+%b/+%A/g'`
$varCurentDate

Ich habe nochmals versucht auf deine Problemstellung einzugehen. Aber ich glaube du befindest dich mit deiner Vorgehensweise oder deinen Gedanken in einer Sackgasse im Bezug auf die Verwendung von Variablen und ausführbaren Kommandos.

Vielleicht kannst du "exakt" beschreiben welche der Informationen des Zeitstempels benötigt werden und wie und für welche Zwecke diese Informationen im Skript weiter verwendet werden sollen.
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
@Zottelhias
Was nun folgt, hat absolut nichts mit dir zu tun, weshalb du dich auch bitte nicht angesprochen fühlen solltest.
Ich glaube wir sprechen aneinander vorbei.
Mit ganz großer Sicherheit...

Ich hoffe das ist verständlicher.
Nein ist es nicht.

@luddi
Wenn ich das lese, werden bei mir gleich alte Erinnerungen wach, als wir zwei damals zum Thema rsync und SSH per PN mehrfach aneinander vorbeigeredet hatten.

Nun aber wieder „back to topic“

Tommes
 
  • Love
Reaktionen: luddi

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
Wenn ich das lese, werden bei mir gleich alte Erinnerungen wach [...]
Das ging mir auch schon durch den Kopf als ich den vorherigen Beitrag geschrieben habe :ROFLMAO: Aber wir konnten damals unser Verständnis jedenfalls auf den gleichen Nennen bringen und haben schlussendlich begriffen dass wir nur aneinander vorbeigeredet hatten. (y)

@Tommes Aber wie ist deine Auffassung hierzu? Hast du genau verstanden was @Zottelhias hier darstellen möchte oder bin es wieder nur ich der es nicht versteht. Es kann ja durchaus sein, dass ich derjenige Kandidat bin der mit anderen gerne aneinander vorbeiredet. :unsure:
 
  • Haha
Reaktionen: Tommes

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Aber wie ist deine Auffassung hierzu? Hast du genau verstanden was @Zottelhias hier darstellen möchte
Nun, am Ende möchte er - so verstehe ich es jedenfalls - über den date Befehl dasselbe Datumsformat bzw. den Timestamp Jan 31 23:15:09 (so wie es im Protokoll im Beitrag #32 ausgegeben wird) in einer Variablen erzeugen, damit er diesen mit dem Timestamp des Protokolleintrages vergleichen kann. So nach dem Motto

if -> Timestamp Protokoll == Timestamp Variable -> then -> shutdown Remoteserver.

Er möchte also sowas hier...
Bash:
tommes@terminal:~$ echo `date '+%b %d %H:%M:%S'`
Feb 03 16:28:13

... oder als Variable ausgedrückt...

Bash:
tommes@terminal:~$ varCurentDate=$(date '+%b %d %H:%M:%S')
tommes@terminal:~$ echo ${varCurentDate}
Feb 03 16:28:13

...oder bin es wieder nur ich der es nicht versteht.
Das denke ich nicht. Ich denke eher, das @Zottelhias noch ein Verständnisproblem mit Variablen unter bash hat (nicht bös gemeint, wir alle haben mal klein angefangen) und das man einerseits einer Variablen einfach einen vorgegebenen Wert mitgeben kann, man anderseits innerhalb einer Variablen einen Befehl ausführen kann, dessen Ergebnis dann dem Wert der Variablen entspricht. Das man das alles durch Substitutionen noch weiter verwursten kann, kommt dann on Top dazu. Puh... kann man meinem Gedankengang folgen? Ich kann das manchmal nicht so gut erklären.

Vielleicht kann @Zottelhias ja kurz nicken, wenn ich richtig lag.

Tommes
 
Zuletzt bearbeitet:

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
[..] den Timestamp Jan 31 23:15:09 (so wie es im Protokoll im Beitrag #32 ausgegeben wird) in einer Variablen erzeugen [...]
Ja okay aber genau das hatte ich doch versucht zu erklären. Zugegeben nicht exakt wie eben in Beitrag #51 von dir dargetstellt varCurentDate=$(date '+%b %d %H:%M:%S') um zum gewünschten Ziel zu gelangen aber etwas Denken sei an dieser Stelle auch erlaubt... (sorry der Spruch musste jetzt sein) :confused:
Wie es auch immer sein mag, bin ich davon ausgeganen dass der Rest nach den bisherigen Erläuterungen und Beispielen genügt um dies selbst in einer Variable abzulegen zu können.

Aber ich möchte jetzt auch nicht weiter orakeln oder jemandem alles aus de Nase ziehen. Wenn hier klar und deutlich kommuniziert wird was exakt gewünscht ist kann ich auch nicht weiter unterstützen als bisher.

[...] wir alle haben mal klein angefangen [...]
Auch ich weiß nicht alles was Shell scripting betrifft und lerne deshalb permanent dazu. Also ganz nach dem Motto "nobody is perfect" und wir alle hier im Forum sind bemüht gerne jedem zu helfen wenn möglich.
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
In meinen Augen hast du alles richtig gemacht, da @Zottelhias ja selbst erwähnte, das…

Wie gesagt, es geht mir nicht darum dass mir jemand etwas vorfertigt und dass dann so rüberkommt, als ob ich nur vorgekautes essen wolle…

… deshalb habe ich mich nach dieser Äußerung von ihm auch etwas zurückgehalten. Sei’s drum. Für jemanden der solch ein Vorhaben alleine umsetzten möchte, dabei aber schon an der date Formatierung scheitert, für den muss der Weg wirklich steinern sein. Aber auch das hat er ja bereits selbst festgestellt, denn…

Ich gehe meist einen sehr harten weg.

Von daher… ich halte sein Vorhaben in Anbetracht seines Kenntnisstandes in Sachen BASH Scripting immer noch für sehr ambitioniert. Ich bin sicherlich kein Held in diesen Dingen und schon garnicht allwissend. Ich habe vor ein paar Jahren auch mal mit einem Zehnzeiler Shell Script angefangen, weil ich es besser machen wollte, als Synology mit seiner Erstveröffentlichung von Hyper Backup. Ich habe auch vieles auf die Harte Tour lernen müssen und bin dabei sehr steinige Wege gegangen. Alleine wäre ich wohl schnell wieder in der Versenkung verschwunden, daher meine Empfehlung an @Zottelhias, gut gemeinte und konstruktive Hilfe auch mal anzunehmen und nicht den Anspruch an sich selbst zu haben alles alleine bewerkstelligen zu müssen. Wie gesagt, bitte nicht falsch verstehen, ich gebe nur meine eigenen Erfahrungen weiter. Nicht mehr und nicht weniger.

Tommes
 
Zuletzt bearbeitet:

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
@luddi
Eventuell habe ich versucht zu schnell zwischen durch etwas zu kommunizieren, was wie bereits von mir festgestellt
Ich glaube wir sprechen aneinander vorbei.
und du mir das auch bestätigst:
Mit ganz großer Sicherheit...
in einer "Ananeinander-Vorbei-Kommunikation" mündete :).

Das tut mir Leid!




@Tommes
Meine Eindruck:
So lnagsam nimmt das unschöne Züge an - Beitrag #53. Du @Tommes, solltet nicht alles aus dem Kontext reißen.
Aus meinem Betrag #40, aus den oberen 7 Zeilen kann man erahnen, was ich machen wollte. Das würde ich als Unerfahrener BASHer sogar noch verstehen. Siehe wie folgt:
Bash:
varCurentDate=date

$varCurentDate
Thu Feb  2 06:56:04 CET 2023

varCurentMonth=$varCurentDate +%b
-sh: +%b: command not found

Mein Ansinnen war, wenn ich Code-Beispiele zeige, dann könnt ihr mehr damit anfangen, als wenn ich auf umständlichem Wege versuche etwas in Text nieder zu schreiben und damit zuviel interpretations Spielraum lasse.

Nachdem ich mir mehr gedanken dazu machen konnte, beschreibt die folgenden vier Zeilen in Worten das, was ich versucht habe in den ersten sieben Zeilen tatsächlich umzusetzen - leider ist mir die folgende Fomulierung erst jetzt eingafallen:
Mit "varCurentDate=date" wollte ich die Variable "varCurentDate" befüllen. Mit "$varCurentDate" wollte ich nun schauen ob auch wirklich etwas geliefert bekomme.
Das Ergebnis sollte nun sein, dass die Variable "varCurentMonth" mit den Informationen aus der Variable "varCurentDate" und der Option "+%b" den Wert "Feb" erhält.

Nachdem das nicht geklappt hat, wollte ich dann versuchen die Variable "varCurentMonth" mit dem Befehl "varCurentMonth=date +%b" den richtigen Wert mit zugeben. Hier habe ich ganz unterschiedliche ansätze verfolgt, wie man in Beitrag #40 sicher gut nachlesen kann.

Die restliche Liste habe ich nur mit reingenommen, damit ersichtlich wird, was ich alles versucht habe um auf ein bestimmtes Ergebnis zu kommen. Weil man nicht nur in anderen Foren sondern auch hier, Besuchern sehr oft nach sagt, sie wirken nicht ausreichend mit oder versuche nicht genug.
Ich wollte keine Informationen vorenthalten. Aus dem Grund habe ich meine vollständigen Eingaben hier eingetragen, um einer kritik, dass ich nicht alles Poste was ich bereits versucht habe, aus dem Weg zu gehen.
In anderen Beiträgen wird das sehr oft kritisiert und ich wollte mein mitwirken unterstreichen - scheinbar kommt weder das eine, noch das andere gut an.

Solangsam habe ich aber den Eindruck, dass sich das Thema eher zu einem schlachtfeld Entwickelt wird (was sich zwischen den Zeilen liest), als zu einem konstrucktiven Beitrag für die Algemeinheit, wenn beahuptungen aufgestellt werden, die so nicht stimmen, wie bspw.:
Vorhaben alleine umsetzten möchte
wobei ich bereits in meinem Beitrag #1
Ich freue mich auf eure Unterstützung und eine rege Beteiligung.
und Beitrag #23 erwähnt habe, dass ich mir
möchte, um solch einer, und dahin entwickelt sich leider meiner Meinung nach seit dem Beitrag #53, wiederwertigen Unterhaltung aus dem Weg zu gehen, wie sich wie folgt richtig schlussfolgern lässt:
dabei aber schon an der date Formatierung scheitert, für den muss der Weg wirklich steinern sein.
Von daher… ich halte sein Vorhaben in Anbetracht seines Kenntnisstandes in Sachen BASH Scripting immer noch für sehr ambitioniert.
Die Beiträge sind provokant und wenig Sachlich formuliert, wenn auch wares mit dran ist. Denn nicht nur der Ton macht die Musik, sondern auch die Tatsache, wie sich nachher etwas lesen lässt und vorallem was zwischen den Zeilen steht! Es ist wie beim Essen. Das Auge isst auch mit, hat aber keinen Mund;). Manche Sachen oder Formulierungen haben auch einfachnur einen Faden beigeschmak :sick:.

Außerdem solltest du @Tommes dich mit mit Äußerungen die ich ANGEBLICH getroffen habe, sehr zurückhalten, wie bspw.:
konstruktive Hilfe auch mal anzunehmen
Sag mir wo ich diese Ausgeschlagen habe - darauf solltest du dann schon eine Antwort liefern können?
Im Übrigen solltest du dir meinen Eröffnungspost Beitrag #1 letzte Zeile ansehen - siehe wie folgt:
Ich freue mich auf eure Unterstützung und eine rege Beteiligung.

Folgendes:
nicht den Anspruch an sich selbst zu haben alles alleine bewerkstelligen zu müssen
habe ich auch nicht vor, da ich vor hatte wie im Beitrag #1 letzte Zeile
Ich freue mich auf eure Unterstützung und eine rege Beteiligung.
oder Beitrag #23 erwähnt, mir
möchte!

Mein Beitrag #23 beschreibt um was es hier geht:
Aber wie gesagt… eventuell und… erwarte mal nicht zu viel von mir. Aber das Thema ist nicht ganz uninteressant.
Ohne dich einbremsen zu wollen, es geht mir nicht darum das mir das jemand schreiben soll. Ich wollte das selber machen und mir nur Tipps holen, wo ich die ein oder anderen Infos zusammentragen kann.
Weder lehen ich hilfe ab, noch sollte sich jemand dazu genötigt fühlen mehr Zeit als notwendig hier rein zu stecken. Immerhin bin ich derjenige der etwas will und sollte damit auch einen nicht unerheblichen Beitrag dazu leisten. Aber, und das ist wichtig, am Anfang schreibe ich bereits: "Ohne dich einbremsen zu wollen...".
Im Übrigen "Ich wollte das selber machen...", ist nicht das selbe wie, "Ich will das selber machen...".
Das hier "Ich wollte das selber machen..." besagt: Ich wollte es selber machen, bin aber auch nicht abgeneigt wenn mir jemand hilft!
Das hier "Ich will das selber machen..." besagt: Ich will es selber machen!
Für dich zum verständniss.

Du bist ein Held darin nur die Sachen zu Zitieren, die dir helfen die Aussagen anderer so zu verfälschen oder in einem anderen Licht dastehen zu lassen, das deren Kontext nicht wiedererkennbar ist, was man am folgenden Beispiel prima sieht!:
In meinen Augen hast du alles richtig gemacht, da @Zottelhias ja selbst erwähnte, das…

Wie gesagt, es geht mir nicht darum dass mir jemand etwas vorfertigt und dass dann so rüberkommt, als ob ich nur vorgekautes essen wolle

… deshalb habe ich mich nach dieser Äußerung von ihm auch etwas zurückgehalten. Sei’s drum.
Sag den leuten doch einfach, Sie sollen sich die Beitrage von #22 bis einschließlich #25 selber durchlesen. Dann ist die kommuniation nicht aus dem Kontext gerissen.
Denn im Beitrag #24 wirkt es nicht so, als ob du gekränkt durch meine Aussage gewesen wärst - siehe wie folgt:
... ich halt ja schon die Füße still, setz mich auf meine Hände und halte den Babbel
Weil du den Kontext dazu hattest. Nur schade das der ;) im Zitat nicht erkennbar ist!

Was den folgenden Satz betrifft:
… deshalb habe ich mich nach dieser Äußerung von ihm auch etwas zurückgehalten.
hast du im Anschluss noch die Beiträge 27, 29, 31, 34, 36, 44, 49, 51, 53 geschrieben - eingebremst?


Wenn du folgendes möchtest:

Wie gesagt, bitte nicht falsch verstehen
dann Formuliere du deinen Text anders!

Ein "Sehr erfahrens" Forenmitglied, sollte neben einer gewissen Fachkompetenz auch eine Soizialkompetenz und Methodenkompetenz haben um Probleme die hier diskutiert werden besser lösen zu können, als in solchen scheinheiligen Äußerungen wie diese eine ist:
Wie gesagt, bitte nicht falsch verstehen
die gemachten Aussagen
dabei aber schon an der date Formatierung scheitert, für den muss der Weg wirklich steinern sein
oder
Von daher… ich halte sein Vorhaben in Anbetracht seines Kenntnisstandes in Sachen BASH Scripting immer noch für sehr ambitioniert
von dir beschwichtigen zu wollen.

Entweder hü oder hot. Wenn du etwas nicht so meinst, wie du es schreibst, solltest du es niemals so schreiben. Sonst wirkst du nicht nur unglaubwürdig, dann könntest du es auch sein oder bist es vermutlich auch.

Wenn du schreibst:
ich gebe nur meine eigenen Erfahrungen weiter
Meinst du jetzt andere fertig zu machen, ohne Sie tatsächlich zu beleidigen?

Abgesehen vom Beitrag #53 fand ich alles Übrige von dir und den anderen gut bis sehr gut. Aber mit deinem Beitrag #53 hast du dich @Tommes in eine dermasen schlechte Position gebracht, die ich das sowas von sicher nicht unkommentiert lassen werde und wenn du noch so oft schreibst:
Wie gesagt, bitte nicht falsch verstehen
!

Denn, wenn du deine Beiträge unverfänglicher formulieren wolltest, dann hättest du das vorher oder auch noch im Nachgang bearbeiten können, hast du aber nicht und das ist eine Tatsache.

Das alles kann teilweise sehr Unreif wirken!

Aber hey, wie gesagt, bitte nicht falsch verstehen - alles kann nichts muss!


Können wir nun wieder zum eigentlichen zurück kehren oder bedarf es noch weiterem verbalen vorsteinzeitlichen Menschlichen ausflüssen - oder so ;)?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Bevor du dich nun weiter auf mich einschießt, zieh' ich mal die Reißleine, entschuldige mich für meine teils unqualifizierten, aber auch missverstandenen Äußerungen, da es mir absolut fern liegt...
...andere fertig zu machen, ohne Sie tatsächlich zu beleidigen...
... und konzentriere mich nachfolgend auf's wesentliche. Am Ende will ich nur helfen und wer mich kennt, weiß, das ich hier nicht auf Krawall aus bin.

Du schreibst:
varCurentDate=date

$varCurentDate
Thu Feb 2 06:56:04 CET 2023

[...]

Mit "varCurentDate=date" wollte ich die Variable "varCurentDate" befüllen. Mit "$varCurentDate" wollte ich nun schauen ob auch wirklich etwas geliefert bekomme.

Soweit kann ich dir folgen, wobei die richtige Schreibweise diese hier wäre...
Bash:
varCurentDate=$(date)
echo ${varCurentDate}
Thu Feb  2 06:56:04 CET 2023

Du schreibst weiter:
varCurentMonth=$varCurentDate +%b
-sh: +%b: command not found

[...]

Das Ergebnis sollte nun sein, dass die Variable "varCurentMonth" mit den Informationen aus der Variable "varCurentDate" und der Option "+%b" den Wert "Feb" erhält.
Ab hier kann ich dir nicht mehr ganz folgen.
date ist erst mal ein Befehl, den, setzt du diesen einfach im Terminal ab, dir das aktuelle Datum sowie die aktuelle Uhrzeit ausgegeben wird. Daher sprach ich auch von Timestamp. Diese Ausgabe kannst du jetzt so weit manipulieren, das du dir am Ende z.B. einfach nur den aktuellen Monat ausgeben lässt, so wie @luddi bereits beschrieben hat...

Bash:
monatkurz=$(date '+%b')
monatlang=$(date '+%B')
echo ${monatkurz}
Feb
echo ${monatlang}
February

... oder wenn du dir den Monat direkt  im Terminal ausgeben lassen möchtest...
tommes@terminal:~$ date '+%b'

Möchtest du stattdessen aber herausfinden wollen, ob die aktuelle Ausgabe von date den von dir gesuchten Monat "Feb" enthält, dann müsstest du das mit einer Abfrage lösen, wie z.B.
Bash:
varCurentDate=$(date)

if [[ "${varCurentDate}" == *Feb* ]]; then
        echo "true"
else
        echo "false"
fi

So habe ich dich jedenfalls verstanden, da du meines Erachtens am Ende ja sowas in der Art erreichen wolltest.
if -> Timestamp Protokoll == Timestamp Variable -> then -> shutdown Remoteserver.
... oder nicht? Vielleicht bin ich irgendwo in diesem Thread falsch abgebogen, aber wir sprachen Anfangs davon, wie man ein Protokoll anhand des Datums auswerten kann, um einen Vergleich anstellen zu können, ob das Backup (erfolgreich) durchgelaufen ist und der Remoteserver runtergefahren werden kann.

Tommes
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peterhoffmann

peterhoffmann

Benutzer
Sehr erfahren
Mitglied seit
17. Dez 2014
Beiträge
6.057
Punkte für Reaktionen
1.855
Punkte
254
Ich verstehe das Thema auch nicht so ganz.

Wenn ich einen Vergleich machen möchte, warum nimmt man nicht gleich die Unixzeit:
Code:
date +%s
Damit lässt sich doch wunderbar z.B. das Dateialter mit der aktuellen Zeit auf die Sekunde ausrechnen und damit auch bewerten.

Aber vielleicht bin ich auch unterwegs irgendwo gedanklich abgebogen und was übersehen. 🤔
 
  • Like
Reaktionen: luddi und Tommes

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Damit lässt sich doch wunderbar z.B. das Dateialter
Das wäre zwar auch ein Ansatz, nicht den Inhalt des Protokolls nach einem Datum zu durchsuchen, sondern das Dateialter des Protokolls selbst. Aber wir sollten das hier vorerst nicht weiter vertiefen, sondern abwarten, was @Zottelhias antwortet, sonst driftet das hier wirklich ziemlich ab.
 

luddi

Benutzer
Sehr erfahren
Mitglied seit
05. Sep 2012
Beiträge
3.259
Punkte für Reaktionen
601
Punkte
174
[...] wer mich kennt, weiß, das ich hier nicht auf Krawall aus bin.
Das kann ich mit reinem Gewissen bestätigen!

@Zottelhias Auch ich war dir mit meinem Ton gegenüber vermutlich nicht ganz fair und freundlich gewesen und muss mich an dieser Stelle einmal selbst zitieren.
[...] etwas Denken sei an dieser Stelle auch erlaubt...
Hierfür möchte ich mich bei dir entschuldigen.

Mit "varCurentDate=date" wollte ich die Variable "varCurentDate" befüllen. Mit "$varCurentDate" wollte ich nun schauen ob auch wirklich etwas geliefert bekomme.
Das Ergebnis sollte nun sein, dass die Variable "varCurentMonth" mit den Informationen aus der Variable "varCurentDate" und der Option "+%b" den Wert "Feb" erhält.
Und genau das hatte ich bereits verstanden und wollte dich mit meiner Antwort darauf aus Beitrag #43 mit Beispielen vom Holzweg abbringen. Nun ja vielleicht hatte ich mich auch unverständlich versucht auszudrücken oder das Verhlaten zu beschreiben worauf ich @Tommes um seine Meinung mir gegenüber gebeten habe.

Nun zurück zum eigentlichen Thema und sachlicher Herangehensweise und Verstand.
@peterhoffmann Ich glaube du hast hier gerade den Groschen fallen lassen mit dem UNIX Timestamp. (y)

Man kann sich den Zeitstempel in einer Variable speichern und diesen dann zu einem späteren Zeitpunkt wieder elegant in das gewünschte Format umwandeln lassen so wie es ursprünglich von @Zottelhias auch gedacht war mit seinen Versuchen die Varibale $varCurentDate immer weiter zu manipulieren.

Jetzt mache ich an dieser Stelle wieder einmal ein Bespiel und hoffe dass dies in die richtige Richtung führt.
Bash:
#!/bin/bash

# Zuweisung des UNIX Zeitstempels an eine Variable
unixTimeStamp=$(date +%s)
echo "$unixTimeStamp"

# Monat Kurzform
varCurentDate=$(date -d @"$unixTimeStamp" +%b)
echo "$varCurentDate"

# Wochentag
varCurentDate=$(date -d @"$unixTimeStamp" +%A)
echo "$varCurentDate"

# Stunde
varCurentDate=$(date -d @"$unixTimeStamp" +%H)
echo "$varCurentDate"

# Minute
varCurentDate=$(date -d @"$unixTimeStamp" +%M)
echo "$varCurentDate"

# Sekunde
varCurentDate=$(date -d @"$unixTimeStamp" +%S)
echo "$varCurentDate"

# Default Ausgabe wie Befehl 'date'
varCurentDate=$(date -d @"$unixTimeStamp")
echo "$varCurentDate"

# Gleiche Ausgabe wie im Logfile --> Post #32
varCurentDate=$(date -d @"$unixTimeStamp" '+%b %d %H:%M:%S')
echo "$varCurentDate"

# Hier mit zusätzlicher numerischer Zeitzone
varCurentDate=$(date -d @"$unixTimeStamp" '+%b %d %H:%M:%S %z')
echo "$varCurentDate"

exit 0


Ausgabe hierzu ist wie folgt:
Code:
1675503605
Feb
Saturday
10
40
05
Sat Feb  4 10:40:05 CET 2023
Feb 04 10:40:05
Feb 04 10:40:05 +0100

Aus dem UNIX Zeitstempel kann man im nachhinein jede beliebige gewünschte Form des Datums mit dem Kommando date ableiten.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Tommes

Zottelhias

Benutzer
Mitglied seit
06. Jun 2011
Beiträge
96
Punkte für Reaktionen
3
Punkte
8
@luddi,
@Tommes,
@peterhoffmann

Bevor du dich nun weiter auf mich einschießt, zieh' ich mal die Reißleine, entschuldige mich für meine teils unqualifizierten, aber auch missverstandenen Äußerungen
Das hat
a. nicht mit auf dich einschießen zu tun und
b. entschuldige ich mich für eventuell missverstandenes auch und
c. gibt es immer die Möglichkeit etwas anders zu fomulieren - unverfänglicher

... und konzentriere mich nachfolgend auf's wesentliche.
Ich mich auch.

Am Ende will ich nur helfen und wer mich kennt, weiß, das ich hier nicht auf Krawall aus bin.
Ich würde gerne am Ende einen Lösung für andere Anbieten wollen. Mir liegt es eben so fern, Krawall zu suchen.

wobei die richtige Schreibweise diese hier wäre...

Bash:
Code:
varCurentDate=$(date)
echo ${varCurentDate}
Thu Feb  2 06:56:04 CET 2023
OK. Bezüglich schreibweise, gibt es irgdwo eine Refferenz wo man das Nachschauen kann?

Das Ziels meines misslungen Vorhabens war es, das was @luddi hier
monatkurz=$(date '+%b')
beschrieben hat, wie folgt Umzusetzen:
varCurentMonth=$varCurentDate +%b
Daher auch die Beschreibung im Text:
Das Ergebnis sollte nun sein, dass die Variable "varCurentMonth" mit den Informationen aus der Variable "varCurentDate" und der Option "+%b" den Wert "Feb" erhält.
Im Nachhinein stelle ich fest ist es Klüger bei solch kurzen befehlen eher den Befehl zu wählen. Wenn es aber nun einen Befehl gäbe, der eine oder ein einhalb Zeilen lang wäre, birgt dass
a. das Risiko den Befehl falsch zu schreiben - daher das Ansinnen mit dem Versuch die Variable zu nehmen
b. ist es angenehmer anstatt eine oder ein einhalb Zeilen lange Befehle wiederholt zu schreiben auf eine Variable zurück zugreifen.

Möchtest du stattdessen aber herausfinden wollen, ob die aktuelle Ausgabe von date den von dir gesuchten Monat "Feb" enthält, dann müsstest du das mit einer Abfrage lösen, wie z.B.

varCurentDate=$(date)

if [[ "${varCurentDate}" == *Feb* ]]; then

echo "true"

else

echo "false"

fi
Um genau zu sein, wollte ich schauen ob ich die Werte die Bereits in der Variable "varCurentDate" enthalten sind weiter nutzen, kann um die Variable "varCurentMonth" mit dem Wert "Feb" zu befüllen.

So habe ich dich jedenfalls verstanden, da du meines Erachtens am Ende ja sowas in der Art erreichen wolltest.

if -> Timestamp Protokoll == Timestamp Variable -> then -> shutdown Remoteserver.

... oder nicht?
In Teilen enstpricht das dem schon.

Ich hätte hier noch weitere Werte in den Vergleich reingenommen, wie bspw.:
"action": "backup"
"status": "complete"
"subaction": "check_complete"

Diese hätte ich dann erst in je eine Variable gekippt:
varActionBackup='"action": "backup"'
varStatusComplete='"status": "complete"'
varSubactionCheckComplete='"subaction": "check_complete"'

Dann würde mein Vergleich so aussehen - Syntax ist falsch, aber ich hoffe ihr wisst was ich meine:
if -> Timestamp Protokoll == Timestamp Variable && value1 Protokoll == varActionBackup && value2 == varStatusComplete && value3 == varSubactionCheckComplete && value4 == -> then -> shutdown Remoteserver.

Also nur wenn alle Bedingungen erfüllt sind, ist klar, dass
a. das Datum stimmt,
b. es sich um ein Backup gehadelt hat,
c. dass Backup vollständig ist,
d. für was auch immer subaction steht, erfolgreich abgeschlossen wurde und
e. kein Prozess mehr offen ist, der das Backup noch negativ beeinflussen kann.

Damit lässt sich doch wunderbar z.B. das Dateialter mit der aktuellen Zeit auf die Sekunde ausrechnen und damit auch bewerten.
Ich kann noch nicht sicher sagen ob etwas dagegenspricht. Die Frage ist nur, was passiert wenn sich zwei Tage überschneiden. Mein Backup wird um 23:20 ausgeführt. Was würde passieren, wenn es erst 23:59 fertiggestellt ist, könnte es hier Probleme geben - das schließe ich im übrigen bei meiner Technik nicht aus?
Es muss eine Sicherheit geben, die feststellt, dass wenn es zum aktuellen Datum/Zeit keine Änderung gibt, dann den Vortag heranzieht.
Ich glaube jetzt, dass deine Methode nicht dazu geeignet ist, da sie folgende Faktoren
a. herauszufinden, ob es um einen BackupTask sich handelt
b. ob der Task erfolgreich abgeschlossen ist,
c. für was auch immer subaction": check_complete steht erfolgreich war,
gegen prüft, ohne in die Datei zu öffnen.

Aber vielleicht bin ich auch unterwegs irgendwo gedanklich abgebogen und was übersehen. 🤔
Das schließe ich bei mir auch nicht ganz aus.

Hierfür möchte ich mich bei dir entschuldigen.
Danke.

Und genau das hatte ich bereits verstanden und wollte dich mit meiner Antwort darauf aus Beitrag #43 mit Beispielen vom Holzweg abbringen. Nun ja vielleicht hatte ich mich auch unverständlich versucht auszudrücken oder das Verhlaten zu beschreiben worauf ich @Tommes um seine Meinung mir gegenüber gebeten habe.
Vielleicht habe ich etwas nicht richtig verstanden.

Jetzt mache ich an dieser Stelle wieder einmal ein Bespiel und hoffe dass dies in die richtige Richtung führt.
Ich will nicht das jemand meint, seine Vorschläge sind Falsch. Mir geht es nicht darum ob etwas Falsch oder Richtig ist. Ich behaupte sogar jetzt, dass ihr mir das Richtige Ergebniss mit an die Hand geben wollt. Ich wollt nur Herausfinden, ob das auf meinem Weg möglich gewesen wäre anstatt
varCurentMonth=$(date +%b)
diesen Weg einzuschlagen den du hier verwendest:
varCurentDate=$(date -d @"$unixTimeStamp" +%b)
mein Part sehe dann so aus, wenn ich mich nicht irre:
Code:
varCurentDate=$(date +%s)

varCurentMonth=$(date -d @"$varCurentDate" +%b)

echo $varCurentMonth

Feb
Nach dem ich das versucht habe, stimmt das.

Aus dem UNIX Zeitstempel kann man im nachhinein jede beliebige gewünschte Form des Datums mit dem Kommando date ableiten.
Danke für die Info.
 
  • Like
Reaktionen: Tommes

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.737
Punkte für Reaktionen
1.646
Punkte
314
Hi!

Ich würde gerne am Ende einen Lösung für andere Anbieten wollen. Mir liegt es eben so fern, Krawall zu suchen.
Prima. Dann sind wir alle wieder auf einer Linie und können weiter versuchen, alle Rätsel zu enträtseln.

OK. Bezüglich schreibweise, gibt es irgdwo eine Refferenz wo man das Nachschauen kann?
Es gibt in meinen Augen zwei gute Referenzen, die sehr viele Informationen zum Thema Shell-Scripting enthalten und zwar…

https://openbook.rheinwerk-verlag.de/shell_programmierung/

… sowie eine Kurzfassung…

https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/

Im letzteren Link wird z.B. auch die Schreibweise beschrieben, wie man Ausgaben in eine Variable schreiben kann. Es gibt aber sicherlich noch weitere Referenzen, wie z.B. die Linux man Pages usw. Such dir was aus.

Da ich grade auf dem Sprung bin, werde ich mich später mit all den anderen Dingen beschäftigen und mich ggf. dazu äußern. Jetzt muss ich aber erst mal los.

Tommes
 
  • Like
Reaktionen: Zottelhias


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat