一、直接獲取當(dāng)前時(shí)間
獲取當(dāng)前時(shí)間是shell編程中的常見需求,最簡(jiǎn)單的方法是使用date
命令。這個(gè)命令可以根據(jù)參數(shù)的不同,輸出不同格式的時(shí)間信息。例如:
date
運(yùn)行這條命令后,會(huì)輸出當(dāng)前系統(tǒng)時(shí)間,格式為:
Wed Jun 30 15:14:19 CST 2021
其中,CST
表示中國標(biāo)準(zhǔn)時(shí)間。
如果只想輸出時(shí)間的某個(gè)部分(如小時(shí)),可以使用date +"%H"
命令:
date +"%H"
這樣會(huì)輸出當(dāng)前小時(shí)數(shù),格式為兩位數(shù)字。
當(dāng)然,也可以根據(jù)需要自定義輸出格式。例如,輸出當(dāng)前日期和時(shí)間的完整字符串:
date +"%Y-%m-%d %H:%M:%S"
輸出的結(jié)果會(huì)類似這樣:
2021-06-30 15:21:47
二、獲取時(shí)間戳
時(shí)間戳是指從1970年1月1日0時(shí)0分0秒(UTC)起至現(xiàn)在的總秒數(shù)。在shell中,通過date +%s
命令可以獲取當(dāng)前時(shí)間戳:
date +%s
輸出結(jié)果為一個(gè)整數(shù),表示當(dāng)前時(shí)間戳。
三、計(jì)算時(shí)間差
有時(shí)候我們需要計(jì)算兩個(gè)時(shí)間點(diǎn)之間的時(shí)間差。在shell中,可以使用date -d
命令來計(jì)算兩個(gè)時(shí)間之間的時(shí)間差。
例如,計(jì)算當(dāng)前時(shí)間和指定時(shí)間(2021年7月1日9時(shí)30分)之間的時(shí)間差:
now=$(date +%s) # 獲取當(dāng)前時(shí)間戳
target=$(date -d "2021-07-01 09:30:00" +%s) # 獲取目標(biāo)時(shí)間戳
diff=$((target-now)) # 計(jì)算時(shí)間差,單位為秒
echo "距離目標(biāo)時(shí)間還有 ${diff} 秒"
運(yùn)行后輸出的結(jié)果為:
距離目標(biāo)時(shí)間還有 68874 秒
四、定時(shí)執(zhí)行任務(wù)
在shell中,可以使用crontab
命令來定時(shí)執(zhí)行任務(wù)。使用crontab -e
命令編輯cron表達(dá)式,以指定任務(wù)的執(zhí)行時(shí)間。
例如,下面的cron表達(dá)式表示每天凌晨1點(diǎn)鐘執(zhí)行任務(wù):
0 1 * * * /bin/bash /path/to/script.sh
其中,路徑為/path/to/script.sh
的腳本將會(huì)在每天凌晨1點(diǎn)鐘自動(dòng)執(zhí)行。
五、獲取精確時(shí)間
通過以上幾種方法,我們可以獲取到精確到秒的時(shí)間信息。如果需要精確到毫秒、微秒甚至納秒級(jí)別,可以使用date
命令的+%N
參數(shù),例如:
date +"%Y-%m-%d %H:%M:%S.%N"
輸出的結(jié)果類似于下面這樣:
2021-06-30 15:44:50.692471505
其中,.692471505
表示當(dāng)前時(shí)間的納秒部分。
六、結(jié)合其他命令使用
在shell編程中,獲取時(shí)間與其他命令結(jié)合使用是非常常見的操作。例如,使用find
命令查找5天前修改過的文件:
find /path/to/dir -type f -mtime +5 -print
其中-mtime +5
表示文件修改時(shí)間在5天前,-print
表示輸出文件列表。
再例如,查找最近一天內(nèi)修改過的文件:
find /path/to/dir -type f -mtime -1 -print
其中,-mtime -1
表示文件修改時(shí)間在最近一天內(nèi)。
總結(jié)
shell是一種非常強(qiáng)大的命令行工具,可以通過各種方式輕松獲取當(dāng)前時(shí)間信息。無論是簡(jiǎn)單地獲取時(shí)間戳,還是定時(shí)執(zhí)行任務(wù),都可以使用shell來實(shí)現(xiàn)。如果對(duì)shell腳本編程比較熟練,還可以將當(dāng)前時(shí)間與其他命令結(jié)合使用,發(fā)揮更強(qiáng)大的功能。