2013-08-21 53 views
1

我正在編寫一個shell腳本來跟蹤一些正在運行的程序的開始時間&。我需要腳本最後打印可讀開始&結束時間和幾秒鐘的時間成本。如何使shell腳本中的可讀和可計算日期/時間?

要計算成本,我寫的是這樣的

START=$(date +%s) 
# ................ 
END=$(date +%s) 
DIFF=$(($END - $START)) 
echo "Start Time: $START" >> $LOGFILE 2>&1 
echo "End Time: $END" >> $LOGFILE 2>&1 
echo "Running time: $DIFF seconds" >> $LOGFILE 2>&1 

這適用於計算,但是$ start和$ END只能打印成秒數。

它能夠打印可讀的日期格式,如果我定義他們像下面

START=$(date +%c) 
END=$(date +%c) 

然而,DIFF = $(($ END - $ START)),他們更多的是行不通的。

因此,我想知道是否有是在shell腳本中的任何解決方案,這樣我既可以打印定義格式的日期,並做一些計算他們。

順便說一句,我使用AIX。

+1

爲什麼不使用'time script.sh'來計算執行需要多長時間? – fedorqui

回答

2

如果你有GNU日期,你可以使用劃時代的時間

date -d @$START +%c 

否則,如果你不能夠使用替代工藝的外殼做

read start start_display < <(date +"%s %c") 
# ... 
read end end_display < <(date +"%s %c") 
diff=$(($end - $start)) 
echo "Start time: $start_display" 

set -- $(date +"%s %c") 
start=$1; shift 
start_display=$* 

如果你使用bash,採取內置$ SECONDS變量的優勢,這是從零開始的一個新的bash進程和每秒遞增。

start_display=$(date) 
# ... 
echo "Start Time: $start_display" 
echo "End Time: $(date)" 
echo "Running time: $SECONDS seconds" 
+0

我對使用'read'的第二個解決方案非常感興趣。但是,該語法在我的系統中不起作用。我必須將其更改爲'print $(date +「%s%c」)| read start start_display'。是因爲我使用ksh嗎? –

+0

可能是由於AIX,不確定。你不需要'print':這會做'date +'%s%c「|閱讀x y' –

0

您可以使用日期-d @Seconds到秒轉換爲日期。 例如:

$ date +%s 
    1377095983 
$ date -d @1377095983 
    Wed Aug 21 20:09:43 IST 2013 
+0

這對我不起作用。我使用的是AIX 5.3,其默認shell是ksh。它支持你的命令嗎? –

+0

Mybad,AIX沒有附帶gnu coreutils來支持帶** date **命令的** -d -s -r -I -f **選項。您需要安裝[gnu coreutils](http://www.gnu.org/software/coreutils/)才能使這些選項正常工作。 – VDR