Um den letzten Tag des letzten Monats im csh?
Wie bekommt man den letzten Tag des letzten Monats im csh?
Hier ist der code, so weit. Die cal-Befehl unten fast funktioniert, wenn Sie es ausführen von der (FreeBSD sh) command line, aber ich bin mit Mühe entkommen Sie richtig ausführen, in einem script. Von fast arbeiten, ich meine, es gibt 31, wenn der Letzte Tag des Monats Februar 2010 ist der 28.
#!/bin/csh
set lastdayoflastmonth=`cal `date '+%m'` `date '+%Y'` | grep . | fmt -1 | tail -1`
echo $lastdayoflastmonth
Klar zu sein:
- Wenn heute der 26. März 2010, sollte es wieder die Nummer 28, dem letzten Tag des Februar 2010.
- Wenn heute der 1. Juli 2010, sollte es wieder die Zahl 30, das ist der Letzte Tag des Juni 2010.
Update: arbeiten Antwort erhalten von Joshua Smith in den Kommentaren unten: date -v31d -v-1m '+%d'
Danke!
ist csh die einzige shell, die Sie verwenden können?
tcsh arbeiten zu
tcsh arbeiten zu
InformationsquelleAutor ANE | 2010-03-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einfach den Befehl "date":
geben Sie das Datum, den Namen des letzten Tages des aktuellen Monats
für den nächsten Monat:
Wenn Sie wollen Vormonat:
-- EDIT: Kommentator hat die Frage über das GNU-Datum ---
Wenn du gnu date (die oben genannten Verwendungen BSD-Datum) können Sie mit dem -d flag. Es ist ein wenig komplizierter, obwohl (gnu date nicht tun das gleiche mit Monat, Länge Unschärfe). um den letzten Tag des Monats für den vergangenen Monat
für den aktuellen Monat:
und für den nächsten Monat
letzten Monat:
das ist der Monat, %m, ich änderte es zu geben, die Tag-Namen. Sie können in der Manpage von strftime, um herauszufinden, die anderen codes (für Woche, Stunde, etc).
Das wäre
date -v31d +'%d'
dann (auf meiner box)Dies scheint, wie es wäre Arbeit, und ist schön und kurz und ordentlich, aber der Letzte Tag des letzten Monats (Februar 2010) ist der 28., aber das gibt mir 31.
Wenn Sie möchten, Feb verwenden Sie einen offset-wie -v2m (2. Monat des Jahres). zum Beispiel:
date -v31d -v2m
+'%d" geben würde, Sie 28. oder mitdate -v31d -v2m +'%a'
würde Ihnen Sonne (drei-Buchstaben-Abk für Tag-name)InformationsquelleAutor Joshua Smith
Ich glaube (wenn ich mich Recht erinnere), dass Sie zu verdoppeln, auf die backticks ( ` ), wenn 'nesting'.
Versuchen (ungetestet):
Sind Sie auf der Solaris? Dieser link (adminschoice.com/solaris-error-messages-e-k#errno98) schlägt vor, es ist das Ergebnis von zwei oder mehr Rohren in einer Reihe. Ich würde versuchen, die Aufteilung der Aussage in zwei "Teile" durch umleiten Sie auf eine temporäre Datei halfwise und dann weiter auf die nächste Anweisung von dort...
InformationsquelleAutor ChristopheD
können Sie verkürzen Ihren Befehl weglassen
grep/fmt
. auch gibt es keine Notwendigkeit, packen Sie in eine Zeile.zB
Nein, tut es nicht. es gibt mir 28
Es gibt 31 in csh FreeBSD, und 31 in der csh auf Linux. Nicht sicher, was Sie verwenden?
ich bin mit tcsh. ist csh die einzige shell, die Sie verwenden können?
Habe gerade versucht es in der tcsh auf FreeBSD und tcsh unter Linux. Es gibt auch 31. csh ist nicht die einzige, die ich verwenden können, aber tcsh gibt die gleiche Sache ...
InformationsquelleAutor ghostdog74