linux腳本獲取時間戳
『壹』 如何在linux顯示日期
顯示時間:年/月/日。
-d參數 ,說明要顯示的是後面的字元串表示的時間,"1 day ago" 說明是1天前的時間。
date "+%Y-%m-%d %H-%M-%S "這樣才是顯示時間 +後都畝銷滲是時間格式。
例如:
date +%Y%m%d //顯示前天年月日
date +%Y%m%d --date="+1 day" //顯示前一天的日期
date +%Y%m%d --date="-1 day" //顯示後一天的日期
date +%s //從 1970 年 1 月 1 日 00:00:00 UTC 到目迅脊前為止的秒數(時間戳)
(1)linux腳本獲取時間戳擴展閱讀:
Linux不僅系統性能穩定,而且是開源軟體。其核心防火牆組件性能高效、配置簡單,保證了系統的安全。在很多企業網路中,為了追求速度和安全,Linux操作系統不僅僅是被網路運維人員當作伺服器使用,Linux既可以當作伺服器,又可以當作網路防火牆是Linux的 一大亮點。
Linux與其他操作系統相比 ,具有開放源碼、沒有版權、技術社區用戶多等特點 ,開放源碼使得用戶可以自由裁剪,靈活性高,功能強大,成本低。尤其系統中內嵌網路協議棧 ,經過適當的配置就可實現路由器的功能。這些特點使得Linux成為斗晌開發路由交換設備的理想開發平台。
『貳』 shell腳本獲取時間戳偶爾報錯value too great for base
在linux Shell中並沒有毫秒級的時間單位,只有秒和納秒。所以在shell中可以獲取秒級時間戳,但是不能獲取毫秒級時間戳。
有時候確實需要毫秒級時間戳,於是使用秒和納秒的時間戳來組合一下。通常我們看到的都是如下寫法:
這個方法你快速地反復去執行,大概五六次就會出現一次報錯 value too great for base 。
date '+%N' 獲取納秒時獲取的是一個字元串,而不是數字,且為了保證九位數,前面會補0,例如 073526864 。遇到首字母為0的字元串,shell正常的除法不能自動將其轉換為數字(是的,雖然你看不到有數據類型,但是他是分數字和字元串類型的,並且使用的時候一般都隱含了類型轉換,lua也有這個問題,被坑過無數次)。
使用 expr命令 。
需要注意的是乘法符號 * 需要寫成 \* ,不然無法識別為乘法符號。
『叄』 linux時間戳命令
date指令相關用法示例
date 用法: date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
直接輸入date
%H : 小時(00..23)
%I : 小時(01..12)
%k : 小時(0..23)
%l : 小時(1..12)
%M : 分鍾(00..59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時時制,格式為 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到當前為為止的秒數
%S : 秒(00..61)
%T : 直接顯示時間 (24 小時制)
『肆』 linux下,記錄響應時間的腳本,精確到毫秒ms
gettimeofday(取得目前的時間)
相關函數
time,ctime,ftime,settimeofday
表頭文件
#include <sys/time.h>
#include <unistd.h>
定義函數
int gettimeofday ( struct timeval * tv , struct timezone * tz )
函數說明
gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的信息則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
timezone 結構定義為:
struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鍾*/
int tz_dsttime; /*日光節約時間的狀態*/
};
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE /*不使用*/
DST_USA /*美國*/
DST_AUST /*澳洲*/
DST_WET /*西歐*/
DST_MET /*中歐*/
DST_EET /*東歐*/
DST_CAN /*加拿大*/
DST_GB /*大不列顛*/
DST_RUM /*羅馬尼亞*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以後)*/
返回值
成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存取許可權。
範例
#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(「tv_sec; %d\n」, tv,.tv_sec) ;
printf(「tv_usec; %d\n」,tv.tv_usec);
printf(「tz_minuteswest; %d\n」, tz.tz_minuteswest);
printf(「tz_dsttime, %d\n」,tz.tz_dsttime);
}
執行
tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0
『伍』 linux運行互動式腳本輸出結果實時屏幕輸出的同時重定向到文件,並屏幕和文件中都有時間戳
時間戳好說,每日輸出日誌前,先執行date命令即可。要實現輸出文件同時列印屏幕只需要在原命令後加管道符,然後接tee 命令再定向到輸出文件。tee命令可以把管道符號前的輸出作為結果文件的輸入同時,列印屏幕。
tee 可以加參數,以追加方式輸出到文件。如tee -a xxx
『陸』 linux腳本時間變數調用
你的變數定義格式有誤,變數調用系統命令時的格式:
TIME=$(date-d'1dayago'"+%Y%m%d")
或
TIME=`date-d'1dayago'"+%Y%m%d"`
#推薦使用第一種方式,看起來比較直觀也容易避免一些問題
完整的腳本如下:
在/root/目錄下創建名為 tar_log.sh的sh文件
#!/bin/bash
TIME=$(date-d'1dayago'"+%Y%m%d")
logdir="#日誌存放位置"
cd$logdir/
tar-zcfip-${TIME}.tar.gzip-${TIME}.txt
crontab 設置如下:
0000***/bin/bash/root/tar_log.sh