2016-03-31 10 views
0

Als Voraussetzung muss ich letzten Monat Datum in Unix (Solaris) csh abrufen.Datum des letzten Monats in Solaris CSH Skript

set Lmit_Date=`date --date='1 month ago' +%Y%m%d` 

über Befehl wird letzten Monat Datum und funktioniert gut in Linux-Server. Aber unser Server ist Solaris und der erwähnte Befehl funktioniert nicht.

Bitte kann jemand empfehlen, wie ich den letzten Monat Datum holen können

+0

bitte können Sie vorschlagen, wie letzten Monat kann in Solaris Server – Ashutosh

+0

abgerufen werden Welche Solaris-Version laufen Sie? – jlliagre

Antwort

1

Sie sollten in der Lage sein coreutils für Ihre Solaris-Plattform zu kompilieren, die Sie mit dem richtigen Datum Dienstprogramm zur Verfügung stellt. Aber wie Coreutils Core Utilities überschreibt, wie der Name schon sagt, können Sie dies in einem benutzerdefinierten Pfad installieren und den richtigen Datumsbefehl über Ihren speziellen Pfad auswählen, sagen Sie "/ opt/coreutils/bin/date".

Die andere Methode wäre, im letzten Monat mit einer symbolischen Datum Ausgabe

aufgeteilt berechnen
eval `date +"set YEAR=%Y; set MONTH=%m ;set DAY=%d"` 

Jetzt Sie auf „$ YEAR“ arbeiten können, „$ MONAT“ und „$ DAY“. Zum Beispiel

let 'MONTH--' 
if [ "$MONTH" -eq 0 ]; then MONTH=12; let 'YEAR--'; fi 
set Lmit_Date=`date --date "$MONTH$DAY0000$YEAR" +"%Y%m%d"` 

Art von. (Ich bin es gewohnt, Bash, also ich weiß nicht, ob let ist hier verfügbar. Aber es gibt einige andere Methoden Shell-Berechnungen. Es könnte ein anderes Schlüsselwort für csh).

Auch Sie müssen auf die Anzahl der Tage pro Monat mit dem Parameter $ DAY achten.

2

Das Problem liegt daran, dass Sie eine GNU-Datumserweiterung verwenden. --date ist nicht Standard.

Darüber hinaus aufgrund der Tatsache, Monatslängen variabel sind, das Datum von GNU Datum angezeigt möglicherweise unerwartet sein, gelinde gesagt ...

Zum Beispiel heute 31. März ist aber „im letzten Monat“ Datum war März die zweite nach GNU Datum:

$ date +%Y%m%d 
20160331 
$ date --date='1 month ago' +%Y%m%d 
20160302 

Wenn Sie noch wollen entweder auf Solaris GNU Datum verwenden oder einige Workarounds finden, haben Sie einen Blick auf diese Antworten: https://stackoverflow.com/a/23507108/211665 und https://stackoverflow.com/a/17817087/211665

+0

* Zum Beispiel ist heute der 31. März, aber der letzte Monat war der 2. März nach dem GNU-Datum * Ooof. Das ist ein unentschuldbar unklares Verhalten. Ich hoffe, dass der Fragesteller seine Verwendung von GNU-Datum überdenkt, um das zu tun. Beachten Sie das Handwringen darüber: https://lists.gnu.org/archive/html/bug-coreutils/2012-08/msg00131.html –

Verwandte Themen