GNU/Linux >> Linux Esercitazione >  >> Linux

Come utilizzare il comando Date negli script Bash in Linux

Quando ho iniziato a scrivere script bash, mi sono reso conto che un'operazione con cui mi occupo spesso di ogni script è la gestione della data e dell'ora. Ho eseguito molte operazioni come nominare un file/directory con la data, recuperare il risultato dell'API e trasformare il valore epoch in una data/ora adatta all'applicazione, manipolare la colonna della data nei file CSV, ecc. Se sei un principiante per gli script Bash, questo articolo aiuterà a capire come usare il comando date negli script Bash, come lavorare con data e ora usando il comando date negli script di shell, come manipolarli ed eseguire varie operazioni con esso in Linux.

Dovresti avere una conoscenza di base di come vengono impostate la data e l'ora del sistema. Questa parte sarà per lo più curata dall'amministratore del server nel tuo lavoro.

Ma se sei un singolo utente e usi Linux nella tua macchina personale, allora dovresti avere una comprensione di come sono impostate data e ora, come sincronizzarle e come modificarle.

Ci sono due orologi usati da Linux per mantenere sincronizzata l'ora.

  • Orologio in tempo reale - Questo è un orologio integrato nella scheda madre del tuo sistema e funzionerà anche se spegni la macchina.
  • Orologio di sistema - Questo sarà gestito dal kernel Linux e durante l'avvio del sistema il kernel otterrà l'ora iniziale dall'orologio in tempo reale.

Non ho intenzione di passare attraverso il processo di impostazione di una data e un'ora, questo è un argomento separato da discutere. Iniziamo a esaminare la parte centrale di questo articolo su come utilizzare la date comando nello scripting Bash in Linux.

Ricevere aiuto

Per prima cosa, puoi controllare la posizione binaria della date comando eseguendo il comando seguente.

$ which date
/usr/bin/date

La date comando non è un built-in della shell ma un programma esterno. Puoi ottenere queste informazioni eseguendo il type comando.

$ type -a date
date is /usr/bin/date
date is /bin/date

Ci sono molte opzioni con cui lavorare e ricordare tutto non è possibile ed è qui che la guida e la pagina man torneranno utili.

Esegui il comando seguente per accedere alla pagina man di date comando.

$ man date

Esegui il comando seguente per accedere al messaggio di aiuto.

$ date --help

Stampa data e ora correnti

Avvia il tuo terminale ed esegui semplicemente date comando. Otterrai la data corrente insieme all'ora e al fuso orario. Nel mio caso, ho impostato il fuso orario su IST durante l'installazione del mio sistema operativo.

$ date
Sunday 13 February 2022 11:27:17 AM IST

Puoi anche ottenere la data e l'ora in UTC fuso orario utilizzando -u bandiera.

$ date -u
Sunday 13 February 2022 05:57:36 AM UTC

Conversione fuso orario

Puoi ottenere l'output della date comando in diversi fusi orari impostando la variabile ambientale TZ . Ho impostato la TZ su Mosca e Singapore fuso orario nell'esempio seguente.

Data
$ Z="Europe/Moscow" date
Sunday 13 February 2022 08:59:03 AM MSK
$ TZ="Asia/Singapore" date
Sunday 13 February 2022 01:59:37 PM +08

Puoi ottenere l'elenco dei fusi orari eseguendo "timedatectl " comando.

$ timedatectl list-timezones
$ timedatectl list-timezones | grep -i singapore
Asia/Singapore
Singapore
$ timedatectl list-timezones | grep -i moscow
Europe/Moscow

Ora dell'ultima modifica di un file

Normalmente, utilizziamo il stat comando per controllare l'ora modificata di un file. Lo stesso può essere verificato con la date comando usando il -r bandiera.

$ stat ~/.bashrc
  File: /home/karthick/.bashrc
  Size: 4342          Blocks: 16         IO Block: 4096   regular file
Device: 806h/2054d    Inode: 27787278    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/karthick)   Gid: ( 1000/karthick)
Access: 2022-02-13 09:06:45.713721080 +0530
Modify: 2022-02-11 20:18:52.485178931 +0530
Change: 2022-02-11 20:18:52.485178931 +0530
 Birth: -
$ date -r ~/.bashrc
Friday 11 February 2022 08:18:52 PM IST

Puoi vedere la stat il formato di output del comando è diverso da date comando, ma entrambi hanno lo stesso scopo.

Diverse opzioni di formattazione

La date comando supporta le opzioni di formattazione e usando queste opzioni puoi formattare la tua date l'output del comando deve essere in qualsiasi formato desideri oppure puoi prelevare solo il valore particolare dall'output.

Apri la date nella pagina man del comando e cerca la sezione come mostrato nell'immagine sottostante.

Ci sono molte opzioni di formattazione, ma non tutte saranno utili. Vedremo alcune delle importanti opzioni di formattazione e capiremo come funziona.

Per impostazione predefinita, la date il comando visualizzerà la data e l'ora. E se desideri stampare solo la data o l'ora?

$ date
Sunday 13 February 2022 11:27:17 AM IST

Per ottenere solo la data, puoi utilizzare il %F flag o %D bandiera.

$ date +%F
2021-11-16
$ date +%D
02/13/22

Quando utilizzi i flag di formattazione, dovresti anteporre + simbolo come ho fatto negli esempi precedenti.

  • L'output di %F la bandiera sarà in AAAA-MM-GG formato.
  • L'output del %D la bandiera sarà tra MM/GG/AA formato.

Puoi prendere il giorno, il mese e l'anno singolarmente e creare il tuo nuovo output formattato.

$ date +%Y
2022
$ date +%m
02
$ date +%d
13

Per creare il tuo output formattato, combina semplicemente tutti i flag mostrati di seguito.

$ date +%Y_%m_%d
2022_02_13

Simile a date, puoi anche ottenere il tempo da solo usando %r (formato 12 ore) o %T flag (formato 24 ore).

$ date +%r # 12 hour format
11:24:12 PM IST
$ date +%T # 24 hour format
23:24:11

Puoi acquisire ore, minuti, secondi individualmente e creare il tuo output formattato.

$ date +%H
12
$ date +%M
24
$ date +%S
03

Combina tutti i flag sopra e crea un output personalizzato.

$ date +%H_%M_%S
12_26_53

Ora, dove aiutano queste opzioni di formattazione personalizzata? Per me, quando creo dei file come parte dello script, lo nomino con la data odierna. Quindi mi sarà utile dargli un'occhiata quando necessario.

Finora abbiamo visto come lavorare con data e ora individualmente. A volte, potresti voler visualizzare sia la data che l'ora. In tal caso, puoi combinare la data e l'ora come di seguito o creare il tuo output formattato.

$ date "+%F %r"
2021-11-16 11:29:06 PM IST

Esegui script solo in determinati giorni

In alcuni casi, potresti voler eseguire lo script solo in un determinato giorno della settimana. Ad esempio, se voglio che il mio script venga eseguito solo venerdì, posso utilizzare %A (venerdì) o %a (Ven) contrassegna e scrivi la logica di conseguenza.

if [[ $(date +%A) = Friday ]]
then
  echo "Running the code"
else
  echo "Today is not Friday, Exiting the script"
fi
OUTPUT:
Today is not Friday, Exiting the script

Sono disponibili più opzioni di formattazione. Fare riferimento alla pagina man ed esplorarli tutti.

Memorizzazione dell'output in una variabile

Quando si scrivono script, è consigliabile memorizzare l'output della date comando a una variabile e utilizzare la variabile nello script. Uno di questi scenari creerà il nome del file con la data e l'ora.

Dai un'occhiata all'esempio seguente in cui la data odierna verrà archiviata nella variabile TDY e lo stesso viene utilizzato per creare un nome file "disk_usage_${TDY}.txt " che memorizzerà l'output di "df -h " comando.

$ TDY=$(date +%F)
$ df -h > ~/disk_usage_${TDY}.txt
$ ls -l *.txt
-rw-rw-r-- 1 karthick karthick 474 Feb 13 23:40 disk_usage_2022-02-13.txt
$ cat disk_usage_2022-02-13.txt 
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           1.6G  154M  1.5G  10% /run
/dev/sda7        93G   27G   61G  31% /
tmpfs           7.8G   82M  7.7G   2% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/sda9       261G  130G  118G  53% /nextdrive
/dev/sda6       348G  110G  221G  34% /home
/dev/sda5       2.0G  234M  1.8G  12% /boot/efi
tmpfs           1.6G  180K  1.6G   1% /run/user/1000

Utilizzo di -d o --date Segnala

Questa è una caratteristica importante che mi piace di più con la date comando. Puoi passare la stringa come argomento a -d o --date flag e otterrai l'output nel formato predefinito.

Dai un'occhiata agli esempi qui sotto. Ho passato argomenti stringa come "today ", "yesterday ", "tomorrow ", "last Thursday ", "Today (+,-) 20 years " al --date bandiera. Il comando Date interpreterà queste stringhe e convertirà l'output nel formato predefinito.

$ date --date "Today"
Sunday 13 February 2022 01:01:26 PM IST
$ date --date "now"
Sunday 13 February 2022 01:01:34 PM IST
$ date --date "yesterday"
Saturday 12 February 2022 01:01:39 PM IST
$ date --date "Tomorrow"
Monday 14 February 2022 01:01:45 PM IST
$ date --date "Last Thursday"
Thursday 10 February 2022 12:00:00 AM IST
$ date --date "Today - 20 years"
Wednesday 13 February 2002 01:01:56 PM IST
$ date --date "Today + 20 years"
Thursday 13 February 2042 01:02:01 PM IST

Puoi passare più argomenti di stringa relativi diversi da quelli che ho mostrato nell'esempio sopra.

Epoca

Epoch time può essere convertito nel formato di data e ora corrente utilizzando il -d o --date bandiera. Il %s l'output del flag sarà in formato epoch.

$ date +%s
1644737777

Per convertirlo in un formato leggibile standard, aggiungi @ seguito da epoch time come mostrato di seguito.

$ date --date @1644737777
Sunday 13 February 2022 01:06:17 PM IST

In tutti gli esempi precedenti, puoi vedere che viene visualizzato l'output predefinito. Puoi combinare i formattatori con -d o --date flag per ottenere un output personalizzato.

$ date --date "Today + 20 years" +%Y
2042
$ date --date "Today + 21 years" +%s
2275890194
$ date --date @2275890194 +%Y
2042

Conclusione

In questo articolo, abbiamo discusso di come utilizzare la date comando nello scripting Bash con esempi. A questo punto, dovresti essere a tuo agio nell'usare la date comando nei tuoi script. Sono disponibili molte opzioni di formattazione, testale e acquisisci familiarità con esse.

Se hai commenti o suggerimenti su questo articolo, faccelo sapere tramite la sezione commenti qui sotto.

Guide agli script di Bash:

  • Come eseguire il debug di script Bash in Linux e Unix
  • Scripting Bash:analisi degli argomenti negli script Bash utilizzando getopts
  • Come creare finestre di dialogo della GUI negli script Bash con Zenity in Linux e Unix
  • Scripting Bash – Case Statement
  • Scripting Bash – Dichiarazioni condizionali
  • Scripting Bash – Manipolazione di stringhe
  • Scripting Bash:comando Printf spiegato con esempi
  • Scripting Bash:array indicizzato spiegato con esempi
  • Scripting Bash:array associativo spiegato con esempi
  • Scripting Bash:il ciclo For viene spiegato con esempi
  • Scripting di Bash:spiegazione del ciclo While e Until con esempi
  • Il reindirizzamento di Bash spiegato con esempi
  • Scripting Bash:variabili spiegate con esempi
  • Scripting Bash:funzioni spiegate con esempi
  • Comando Bash Echo spiegato con esempi in Linux
  • Tutorial Bash Heredoc per principianti

Linux
  1. Come usare il comando Linux grep

  2. Come usare il comando cronologia in Linux

  3. Come usare il comando Su in Linux

  4. Come utilizzare il comando Uptime in Ubuntu Linux

  5. Come utilizzare il comando dello schermo di Linux

Come usare du Command in Linux

Come utilizzare il comando Declare in Linux Bash Shell

Come utilizzare il comando echo negli script Bash in Linux

Come utilizzare il comando sysctl in Linux

Come utilizzare il comando di arresto di Linux

Come usare grep in Linux