2

我正在编写一个 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。

4

2 回答 2

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"
于 2013-08-21T09:19:38.330 回答
0

您可以使用date -d @Seconds将秒转换为日期。例如:

 $ date +%s
     1377095983
 $ date -d @1377095983
     Wed Aug 21 20:09:43 IST 2013
于 2013-08-21T14:43:38.360 回答