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.
$ 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