標籤:shell
1.10 擷取、設定日期和延時
- 很多應用程式需要以不同的格式列印日期、設定日期和時間、根據日期和時間執行某項操作。延時通常用於在程式執行過程中提供一段等待時間(比如1秒)。同樣的,我們也能夠一多種格式列印日期,或者在命令列中設定日期。在類Unix系統中,日期被儲存為一個整數,其大小為自世界標準時間起所流逝的秒數。這種計時方式稱為紀元時或Unix時間。
1.10.1 擷取、設定時間
#!/bin/bashstart=$(date +%s) #擷取紀元時間date #輸出系統時間date +%s #列印紀元時間date --date "Thu Nov 18 08:07:21 IST 2010" +%s #轉換成紀元時間date --date "Jan 20 2001" +%A #擷取當前星期幾#date "+%d %B %Y" #按格式列印日期date -s "21 June 2009 11:01:22" #設定日期和時間end=$(date +%s) #擷取紀元時間difference=$((end-start)) #擷取執行時間echo Time taken to execute commands is $difference seconds.
1.10.2 設定延時
- 編寫以迴圈方式啟動並執行監視指令碼時,設定時間間隔是必不可少的。為了在指令碼中延遲執行一段時間,可以使用sleep no_of_seconds。
#!/bin/bashecho -n Count:tput sc #儲存游標位置count=0while true; do if [ $count -lt 40 ] then let count++ sleep 1; #休眠1秒鐘 tput rc #恢複游標位置 tput ed #清除當前位置到末尾的內容 echo -n $count; else exit 0; fi done
- 以上這段指令碼顯示了如何使用延時。tput sc儲存游標位置,sc為 save cursor的縮寫。在每次迴圈中,通過恢複之前儲存的游標位置,在終端中列印出新的count值。tput rc用於恢複游標位置,rc為 recovery cursor的縮寫。tput ed清除從當前游標位置到行尾之間的所有內容,使得舊的值被清除,寫入新的值,ed可以看作是erase to end 的縮寫。在這段程式中,通過sleep 1提供1秒鐘的延時。
1.10.3 時間設定、讀取時常用的參數
日期內容 |
格式說明 |
星期 |
%a (例如:Sat) |
|
%A (例如:Saturday) |
月 |
%b (例如:Nov) |
|
%B (例如:November) |
日 |
%d (例如:31) |
固定格式日期(mm/dd/yy) |
%D (例如:10/18/10) |
年 |
%y (例如:10) |
|
%Y (例如:2010) |
小時 |
%I或%H (例如:08) |
分鐘 |
%M (例如:33) |
秒 |
%S (例如:10) |
納秒 |
%N (例如:692508515) |
Unix紀元時(以秒為單位) |
%s (例如:1290049486) |
1.10.4 參考
Linux Shell指令碼攻略(1.10)