GNU/Linux >> Znalost Linux >  >> Linux

Jak používat příkaz Date ve skriptování Bash v Linuxu

Když jsem začal psát bash skripty, uvědomil jsem si, že jedna operace, kterou často řeším s každým skriptem, je zpracování data a času. Provedl jsem mnoho operací, jako je pojmenování souboru/adresáře s datem, načtení výsledku API a transformace hodnoty epochy na datum/čas vhodný pro aplikaci, manipulace se sloupcem data v souborech CSV atd. Pokud jste začátečník ve skriptování Bash, tento článek vám pomůže pochopit, jak používat příkaz date ve skriptování Bash, jak pracovat s datem a časem pomocí příkazu date ve skriptech shellu, jak s nimi manipulovat a jak s nimi provádět různé operace v Linuxu.

Měli byste mít základní znalosti o tom, jak se nastavuje systémové datum a čas. O tuto část se ve vaší práci většinou postará administrátor serveru.

Ale pokud jste individuální uživatel a používáte Linux na svém osobním počítači, pak byste měli rozumět tomu, jak se nastavuje datum a čas, jak je synchronizovat a jak je upravit.

Linux používá k synchronizaci času dvě hodiny.

  • Hodiny v reálném čase - Jedná se o hodiny integrované do základní desky vašeho systému a poběží, i když počítač vypnete.
  • Systémové hodiny - To bude zpracováno linuxovým jádrem a během spouštění systému získá jádro počáteční čas z hodin reálného času.

Nebudu procházet procesem nastavení data a času, to je samostatné téma k diskusi. Začněme se zabývat základní částí tohoto článku o tom, jak používat date příkaz ve skriptování Bash v Linuxu.

Získání nápovědy

Nejprve můžete zkontrolovat binární umístění date příkaz spuštěním následujícího příkazu.

$ which date
/usr/bin/date

date příkaz není vestavěný shell, ale externí program. Tyto informace můžete získat spuštěním type příkaz.

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

Existuje mnoho možností, se kterými lze pracovat a pamatovat si vše není možné, a zde se vám bude hodit nápověda a manuálová stránka.

Spusťte následující příkaz pro přístup k manuálové stránce date příkaz.

$ man date

Spusťte následující příkaz pro přístup ke zprávě nápovědy.

$ date --help

Vytisknout aktuální datum a čas

Spusťte svůj terminál a jednoduše spusťte date příkaz. Získáte aktuální datum spolu s časem a časovým pásmem. V mém případě jsem nastavil časové pásmo jako IST během instalace operačního systému.

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

Můžete také získat datum a čas v UTC časové pásmo pomocí -u vlajka.

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

Převod časového pásma

Můžete získat výstup date příkaz v různých časových pásmech nastavením proměnné prostředí TZ . Nastavil jsem TZ na Moskva a Singapur časové pásmo v níže uvedeném příkladu.

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

Seznam časových pásem získáte spuštěním "timedatectl "příkaz."

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

Čas poslední úpravy souboru

Normálně používáme stat příkaz ke kontrole času změny souboru. Totéž lze zkontrolovat pomocí date pomocí -r vlajka.

$ 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

Můžete vidět stat výstupní formát příkazu se liší od date příkaz, ale oba slouží stejnému účelu.

Různé možnosti formátování

date příkaz podporuje možnosti formátování a pomocí těchto možností můžete formátovat date aby byl výstup příkazu v libovolném formátu, který si přejete, nebo můžete z výstupu získat pouze konkrétní hodnotu.

Otevřete date manuálovou stránku příkazu a vyhledejte sekci, jak je znázorněno na obrázku níže.

Existuje mnoho možností formátování, ale ne všechny budou užitečné. Uvidíme některé z důležitých možností formátování a pochopíme, jak to funguje.

Ve výchozím nastavení date příkaz zobrazí datum a čas. Co když si přejete vytisknout pouze datum nebo čas?

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

Chcete-li získat pouze datum, můžete použít %F příznak nebo %D vlajka.

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

Když používáte příznaky formátovače, měli byste před ním uvést + symbol, jak jsem to udělal ve výše uvedených příkladech.

  • Výstup z %F příznak bude v RRRR-MM-DD formát.
  • Výstup z %D příznak bude v MM/DD/RR formát.

Den, měsíc a rok můžete uchopit jednotlivě a vytvořit svůj vlastní nový formátovaný výstup.

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

Chcete-li vytvořit svůj vlastní formátovaný výstup, stačí zkombinovat všechny příznaky zobrazené níže.

$ date +%Y_%m_%d
2022_02_13

Podobně jako u data můžete také získat čas o samotě pomocí %r (12hodinový formát) nebo %T (24hodinový formát) příznaky.

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

Můžete uchopit hodiny, minuty, sekundy jednotlivě a vytvořit si vlastní formátovaný výstup.

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

Zkombinujte všechny výše uvedené příznaky a vytvořte vlastní výstup.

$ date +%H_%M_%S
12_26_53

Kde nyní tyto možnosti vlastního formátování pomáhají? Pro mě, když vytvořím nějaké soubory jako součást skriptu, pojmenuji je dnešním datem. Bude pro mě tedy užitečné se na to v případě potřeby podívat.

Až dosud jsme viděli, jak pracovat s datem a časem individuálně. Někdy možná budete chtít zobrazit datum i čas. V takovém případě můžete zkombinovat datum a čas, jak je uvedeno níže, nebo vytvořit svůj vlastní formátovaný výstup.

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

Spouštět skript pouze v určité dny

V některých případech můžete chtít spouštět skript pouze v určitý den v týdnu. Pokud například chci, aby se můj skript spouštěl pouze v pátek, mohu použít %A (pátek) nebo %a (Pá) příznaky a podle toho zapište logiku.

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

K dispozici je více možností formátování. Podívejte se na manuálovou stránku a prozkoumejte je všechny.

Ukládání výstupu do proměnné

Při psaní skriptů je osvědčeným postupem uložit výstup date příkaz k proměnné a použijte proměnnou ve skriptu. Jedním takovým scénářem bude vytvoření názvu souboru s datem a časem.

Podívejte se na níže uvedený příklad, kde bude dnešní datum uloženo do proměnné TDY a totéž se používá k vytvoření názvu souboru "disk_usage_${TDY}.txt ", který uloží výstup "df -h "příkaz."

$ 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

Pomocí -d nebo --date Vlajka

Toto je důležitá funkce, kterou mám na date nejraději příkaz. Řetězec můžete předat jako argument do -d nebo --date flag a dostanete výstup ve výchozím formátu.

Podívejte se na níže uvedené příklady. Řetězcové argumenty jsem předal jako "today ", "yesterday ", "tomorrow ", "last Thursday ", "Today (+,-) 20 years " k --date vlajka. Příkaz Date interpretuje tyto řetězce a převede výstup do výchozího formátu.

$ 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

Můžete předat více relativních řetězcových argumentů, než jaké jsem ukázal ve výše uvedeném příkladu.

Čas epochy

Čas epochy lze převést na aktuální formát data a času pomocí -d nebo --date vlajka. %s výstup vlajky bude ve formátu epoch.

$ date +%s
1644737777

Chcete-li jej převést do standardního formátu čitelného člověkem, přidejte @ následovaný časem epochy, jak je uvedeno níže.

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

Ve všech výše uvedených příkladech můžete vidět, že je zobrazen výchozí výstup. Formátovače můžete kombinovat spolu s -d nebo --date příznak pro získání vlastního výstupu.

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

Závěr

V tomto článku jsme probrali, jak používat date příkaz ve skriptování Bash s příklady. Do této doby byste měli být s používáním date v pohodě příkaz ve vašich skriptech. K dispozici je spousta možností formátování, otestujte je a seznamte se s nimi.

Pokud máte k tomuto článku nějakou zpětnou vazbu nebo návrhy, dejte nám vědět prostřednictvím sekce komentářů níže.

Příručky skriptování Bash:

  • Jak ladit Bash skripty v Linuxu a Unixu
  • Skriptování Bash – Analýza argumentů ve skriptech Bash pomocí getoptů
  • Jak vytvořit dialogová okna GUI ve skriptech Bash pomocí Zenity v Linuxu a Unixu
  • Bash Scripting – Case Statement
  • Skriptování Bash – podmíněné příkazy
  • Bash Scripting – manipulace s řetězci
  • Skriptování Bash – příkaz Printf s příklady
  • Skriptování Bash – indexované pole s příklady
  • Bash Scripting – Asociativní pole vysvětleno s příklady
  • Bash Scripting – pro smyčku vysvětlenou s příklady
  • Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady
  • Přesměrování Bash vysvětleno na příkladech
  • Bash Scripting – proměnné vysvětlené na příkladech
  • Bash Scripting – funkce vysvětlené na příkladech
  • Příkaz Bash Echo vysvětlený s příklady v Linuxu
  • Výukový program Bash Heredoc pro začátečníky

Linux
  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak používat příkaz Uptime v Ubuntu Linux

  1. Jak používat příkaz historie Linuxu

  2. Jak používat Su Command v Linuxu

  3. Jak používat Linux Screen Command

  1. Jak používat příkaz Bash read

  2. Jak používat příkaz Disown v Linuxu

  3. Jak používat příkaz xargs pro Linux