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