So zeigen Sie Datum und Uhrzeit im Linux-Terminal an (und verwenden es in Bash-Skripten)

Das Kommandozeilenwerkzeug `date` ist ein fester Bestandteil der Bash-Shell, welche die Standard-Shell in den meisten Linux-Distributionen und auch auf macOS darstellt. Dieses Tutorial führt Sie in die Kunst der Datums- und Zeitmanipulation über die Kommandozeile ein und zeigt, wie Sie `date` in Shell-Skripten für mehr als nur die Anzeige der aktuellen Uhrzeit nutzen können.

Wenn Sie den Befehl `date` ohne weitere Parameter ausführen, wird das aktuelle Datum und die Uhrzeit Ihrer Zeitzone ausgegeben:

date

Die Standardausgabe ist nicht immer ideal. Warum etwa das Jahr am Ende der Zeitzone und nicht zwischen Monat und Tag? Hier kommt die Stärke von `date` ins Spiel: Es bietet über 40 Optionen, um die Ausgabe nach Ihren Wünschen anzupassen.

Um eine dieser Optionen zu verwenden, geben Sie `date`, ein Leerzeichen, ein Pluszeichen `+` und die Option mit dem vorangestellten Prozentzeichen ein. Die Option `%c` (Datum und Uhrzeit im Format Ihres Gebietsschemas) sorgt dafür, dass Datum und Uhrzeit in einem Format erscheinen, das den kulturellen Gepflogenheiten Ihrer Region entspricht. Ihr Gebietsschema wird durch die geografischen und kulturellen Einstellungen festgelegt, die Sie bei der Installation Ihres Betriebssystems gewählt haben. Es beeinflusst Aspekte wie Währungssymbole, Papierformate, Zeitzonen und andere kulturelle Normen.

date +%c

Das Jahr ist jetzt in der Ausgabe an einer natürlicheren Position zu finden.

Es ist möglich, mehrere Optionen gleichzeitig zu verwenden. Eine solche Folge von Optionen wird als Formatzeichenkette bezeichnet. Um beispielsweise den ausgeschriebenen Namen des Tages (`%A`), den Tag des Monats (`%d`) und den ausgeschriebenen Namen des Monats (`%B`) anzuzeigen, verwenden Sie folgenden Befehl:

date +%A%d%B

Dies funktioniert zwar, ist aber nicht sehr übersichtlich. Abhilfe schaffen hier Leerzeichen. Wenn wir den gesamten Formatstring in Anführungszeichen setzen, können wir Leerzeichen einfügen. Beachten Sie, dass das `+` außerhalb der Anführungszeichen steht.

date +"%A %d %B"

Der Formatzeichenkette können auch beliebige Textelemente hinzugefügt werden:

date +"Heute ist: %A %d %B"

Das Durchsuchen der Man-Page, um die gewünschte Option zu finden, kann mühsam sein. Im Folgenden haben wir die Optionen in Gruppen zusammengefasst, um Ihnen die Navigation zu erleichtern.

Optionen zur Anzeige von Datum und Uhrzeit

`%c`: Gibt das Datum und die Uhrzeit im Format Ihres Gebietsschemas, einschließlich der Zeitzone, aus.

Optionen zur Anzeige des Datums

`%D`: Gibt das Datum im Format MM/TT/JJ aus.
`%F`: Gibt das Datum im Format JJJJ-MM-TT aus.
`%x`: Gibt das Datum im Format Ihres Gebietsschemas aus.

Optionen zur Anzeige des Tages

`%a`: Gibt den abgekürzten Namen des Tages aus (Mo, Di, Mi usw.).
`%A`: Gibt den vollständigen Namen des Tages aus (Montag, Dienstag, Mittwoch usw.).
`%u`: Gibt die Nummer des Wochentages aus, wobei Montag=1, Dienstag=2, Mittwoch=3 usw.
`%w`: Gibt die Nummer des Wochentages aus, wobei Sonntag=0, Montag=1, Dienstag=2 usw.
`%d`: Gibt den Tag des Monats aus, bei Bedarf mit einer führenden Null (01, 02 … 09).
`%e`: Gibt den Tag des Monats aus, bei Bedarf mit einem führenden Leerzeichen (‚ 1‘, ‚ 2‘ … ‚ 9‘). Die Apostrophe werden nicht ausgegeben.
`%j`: Gibt den Tag des Jahres aus, bei Bedarf mit bis zu zwei führenden Nullen.

Optionen zur Anzeige der Woche

`%U`: Gibt die Wochennummer des Jahres aus, wobei Sonntag als erster Tag der Woche betrachtet wird. (z.B. dritte Woche des Jahres, zwanzigste Woche des Jahres usw.)
`%V`: Gibt die ISO-Wochennummer des Jahres aus, wobei Montag als erster Tag der Woche betrachtet wird.
`%W`: Gibt die Wochennummer des Jahres aus, wobei Montag als erster Tag der Woche betrachtet wird.

Optionen zur Anzeige des Monats

`%b` oder `%h`: Gibt den abgekürzten Namen des Monats aus (Jan, Feb, Mär usw.).
`%B`: Gibt den vollständigen Namen des Monats aus (Januar, Februar, März usw.).
`%m`: Gibt die Zahl des Monats aus, bei Bedarf mit führender Null (01, 02, 03 … 12).

Optionen zur Anzeige des Jahres

`%C`: Gibt das Jahrhundert ohne das Jahr aus. Im Jahr 2019 würde es 20 ausgeben.
`%y`: Gibt das Jahr zweistellig aus. 2019 wird als 19 ausgegeben.
`%Y`: Gibt das Jahr vierstellig aus.

Optionen zur Anzeige der Uhrzeit

`%T`: Gibt die Zeit im Format HH:MM:SS aus.
`%R`: Gibt die Stunden und Minuten im Format HH:MM ohne Sekunden im 24-Stunden-Format aus.
`%r`: Gibt die Zeit gemäß Ihrem Gebietsschema mit 12-Stunden-Uhr und AM/PM-Angabe aus.
`%X`: Gibt die Zeit gemäß Ihrem Gebietsschema im 24-Stunden-Format aus. Beachten Sie, dass diese Option bei Tests genau wie `%r` funktioniert hat (siehe unten). Auf einem Linux-Rechner, der für das britische Gebietsschema konfiguriert war und GMT eingestellt hatte, wurde die Zeit erwartungsgemäß im 24-Stunden-Format ohne AM/PM-Angabe ausgegeben.

Optionen zur Anzeige der Stunde

`%H`: Gibt die Stunden im 24-Stunden-Format aus (00, 01, 02…23).
`%I`: Gibt die Stunde im 12-Stunden-Format aus (00, 01, 02 … 12), bei Bedarf mit führender Null.

Optionen zur Anzeige der Minuten

`%M`: Gibt die Minuten aus (01, 02, 03 … 59), bei Bedarf mit führender Null.

Optionen zur Anzeige der Sekunden

`%s`: Gibt die Anzahl der Sekunden seit 1970-01-01 00:00:00 aus, dem Beginn der Unix-Epoche.
`%S`: Gibt die Sekunden aus (01, 02, 03 … 59), bei Bedarf mit führender Null.
`%N`: Gibt die Nanosekunden aus.

Optionen zur Anzeige von Zeitzoneninformationen

`%z`: Gibt den Zeitunterschied zwischen Ihrer Zeitzone und UTC aus.
`%:z`: Gibt den Zeitunterschied zwischen Ihrer Zeitzone und UTC mit einem Doppelpunkt (:) zwischen Stunden und Minuten aus. Beachten Sie den Doppelpunkt (:) zwischen `%` und `z`.
`%::z`: Gibt den Zeitunterschied zwischen Ihrer Zeitzone und UTC mit einem Doppelpunkt (:) zwischen Stunden, Minuten und Sekunden aus. Beachten Sie die doppelten Doppelpunkte (::) zwischen `%` und `z`.
`%Z`: Gibt den alphabetischen Zeitzonennamen aus.

Optionen zur Formatierung

`%p`: Gibt den AM- oder PM-Indikator in Großbuchstaben aus.
`%P`: Gibt den am- oder pm-Indikator in Kleinbuchstaben aus. Beachten Sie die Eigenart dieser beiden Optionen. Ein Kleinbuchstabe `p` gibt eine Ausgabe in Großbuchstaben, ein Großbuchstabe `P` ergibt eine Ausgabe in Kleinbuchstaben.
`%t`: Gibt einen Tabulator aus.
`%n`: Gibt eine neue Zeile aus.

Optionen zur Veränderung anderer Optionen

Diese Modifikatoren können zwischen dem `%` und dem Optionsbuchstaben anderer Optionen eingefügt werden, um deren Anzeige zu verändern. Z.B. würde `%-S` die führende Null bei einstelligen Sekundenwerten entfernen.

`-`: Ein einzelner Bindestrich verhindert das Auffüllen mit Nullen bei einstelligen Werten.
`_`: Ein einzelner Unterstrich fügt führende Leerzeichen für einstellige Werte hinzu.
`0`: Stellt führende Nullen für einstellige Werte bereit.
`^`: Verwendet, wenn möglich, Großbuchstaben (nicht alle Optionen unterstützen diesen Modifikator).
`#`: Nutzt, wenn möglich, das Gegenteil des Standardfalls für die Option (nicht alle Optionen unterstützen diesen Modifikator).

Zwei weitere nützliche Tricks

Um den Zeitpunkt der letzten Änderung einer Datei zu erfahren, verwenden Sie die Option `-r` (Referenz). Beachten Sie, dass hier ein Minuszeichen `-` anstelle des `%`-Zeichens verwendet wird und kein `+`-Zeichen erforderlich ist. Versuchen Sie diesen Befehl in Ihrem Home-Verzeichnis:

date -r .bashrc

Mit der `TZ`-Einstellung können Sie Ihre Zeitzone für die Dauer eines einzelnen Befehls ändern.

TZ=GMT date +%c

`date` in Skripten verwenden

Es ist einfach, ein Bash-Shell-Skript zu erstellen, um Datum und Uhrzeit auszugeben. Erstellen Sie eine Textdatei mit folgendem Inhalt und speichern Sie sie als `gd.sh`.

#!/bin/bash

TODAY=$(date +"Today is %A, %d of %B")
TIMENOW=$(date +"The local time is %r")
TIME_UK=$(TZ=BST date +"The time in the UK is %r")

echo $TODAY
echo $TIMENOW
echo $TIME_UK

Geben Sie den folgenden Befehl ein, um die Ausführungsrechte zu setzen und das Skript ausführbar zu machen:

chmod +x gd.sh

Führen Sie das Skript mit diesem Befehl aus:

./gd.sh

Wir können den `date`-Befehl verwenden, um einen Zeitstempel zu erzeugen. Das folgende Skript erstellt ein Verzeichnis mit dem Zeitstempel als Namen. Dann kopiert es alle Textdateien aus dem aktuellen Verzeichnis dorthin. Durch regelmäßiges Ausführen dieses Skripts können wir eine Momentaufnahme unserer Textdateien erstellen. Im Laufe der Zeit erstellen wir so eine Reihe von Ordnern mit verschiedenen Versionen unserer Textdateien.

Beachten Sie, dass dies kein robustes Backup-System ist, sondern lediglich der Veranschaulichung dient.

Erstellen Sie eine Textdatei mit folgendem Inhalt und speichern Sie sie als `snapshot.sh`:

#!/bin/bash

# obtain the date and time
date_stamp=$(date +"%F-%H-%M-%S")

# make a directory with that name
mkdir "$date_stamp"

# copy the files from the current folder into it
cp *.txt "$date_stamp"

# all done, report back and exit
echo "Text files copied to directory: "$date_stamp

Geben Sie den folgenden Befehl ein, um die Ausführungsrechte zu setzen und das Skript ausführbar zu machen:

chmod +x snapshot.sh

Führen Sie das Skript mit diesem Befehl aus:

./snapshot.sh

Sie werden sehen, dass ein Verzeichnis erstellt wurde. Sein Name entspricht dem Datum und der Uhrzeit, zu der das Skript ausgeführt wurde. In diesem Verzeichnis finden Sie Kopien der Textdateien.

Mit etwas Überlegung und Kreativität kann sogar der unscheinbare `date`-Befehl produktiv eingesetzt werden.