Wie ändert man den Wert einer Variablen in einem Shell-Skript mit der Befehlsausgabe jedes Mal, wenn das Skript per Cronjob ausgeführt wird?

Wie ändert man den Wert einer Variablen in einem Shell-Skript mit der Befehlsausgabe jedes Mal, wenn das Skript per Cronjob ausgeführt wird?

Ich habe ein Skript, das einen Get-Befehl ausführt und die Ausgabe in einer Variable namens newvalueund einer weiteren Variable namens speichert oldvalue(manuell darin ein Wert gespeichert). Dann subtrahiert das Skript newvalue - oldvalueund speichert das Ergebnis in einer Variable namens finalvalueund dem Endwert von Echo. Ich muss dieses Skript alle 4 Stunden mit einem Cron-Job ausführen und eine E-Mail mit einem Echo von senden . Bis hierhin hat alles gut funktioniert. Jetzt möchte ich, dass dieses Skript die Variable mit dem Wert von finalvalueaktualisiert, sobald das Senden der E-Mail abgeschlossen ist. Bedeutet, dass alle 4 Stunden, wenn das Skript ausgeführt wird, der Wert der Variable mit last geändert werden soll . Bitte schlagen Sie eine Problemumgehung vor.oldvaluenewvalueoldvaluenewvalue

Antwort1

Wenn Sie ein Skript ausführen, egal ob Sie es von cronoder direkt in der Befehlszeile ausführen, wird dieses Skript in seiner eigenen "Subshell", in seiner eigenen Umgebung ausgeführt. Alle während der Ausführung des Skripts gesetzten Variablen sind nur sichtbar fürDasSkript, während es ausgeführt wird. Wenn Sie dasselbe Skript dann erneut ausführen, ist es vollständig unabhängig von der ersten Ausführung und es besteht keine Möglichkeit, dass eine Variable aus der ersten Ausführung irgendwie erhalten bleibt und von der zweiten, separaten Ausführung übernommen wird.

Wenn Sie also einen Wert über mehrere Instanzen des Skripts hinweg beibehalten müssen, müssen Sie ihn in einer temporären Datei speichern. Fügen Sie Ihrem Skript einfach etwas wie das Folgende hinzu:

oldValue=$(cat /path/to/temp/file);
newValue=$(whatever gives you the new value)
finalValue=$((newvalue - oldvalue))
echo "$finalValue" > /path/to/temp/file

verwandte Informationen